输出以下C代码

时间:2014-07-09 14:10:34

标签: c logical-operators

int i=-1,j=-1,k=0,l=2,m;
m=l++||i++ && j++ && k++;
printf("%d %d %d %d %d",i,j,k,l,m);

代码输出为:-1 -1 0 3 -1
我的问题是,即使i++的优先级高于j++k++ &&||也未被评估?

2 个答案:

答案 0 :(得分:1)

请参阅 Short-circuit evaluation.

基本上发生的事情是,当l ++ = 3不是0时,它的计算结果为True(只有0才是False)。因此,||之后的表达式的第二部分没有评估。

答案 1 :(得分:1)

想想

m=l++||i++ && j++ && k++;  

as

m = ( (l++)|| ( (i++ && j++) && (k++) ) );  

如您所知&&具有更高的运算符优先级,因此i++ && j++ && k++将被分组为(i++ && j++) && k++,然后( (i++ && j++) && (k++) )。 由于||的短路行为,在评估l++后,true因此是正确的操作数((i ++&& j ++)&&(k ++) )||未评估。