好奇怪的题目。。。。
#include "stdio.h"main()
{
int a=5,b=6,c=1,x=2,y=3,z=4;
c=(a=c>x)&&(b=y>z);
printf("%d,%d,%d",a,b,c);
}
这里B为什么是6,而a却是0啊???
这是因为编译器有优化功能,在计算如a&&b这样的逻辑表达式时,当a为假时结果就为假,不会计算后面的b的值。同样的计算如a||b的值时,当a的值为真时不会再计算b的值。
因为a=c>x的值为假,所以后面的b=y>z没有计算,可以用下面的两个程序验证:
#include "stdio.h"
main()
{
int a=5,b=6,c=1,x=2,y=3,z=4;
c=(a=c>x)&&(printf("done!"));
printf("%d,%d,%d",a,b,c);
}
输出为:0,6,0
#include "stdio.h"
main()
{
int a=5,b=6,c=1,x=2,y=3,z=4;
c=(a=c<x)&&(printf("done!"));
printf("%d,%d,%d",a,b,c);
}
输出为:done!1,6,1
同样的可以验证a||b形式的求值情况