2017-02-01 23 views
0
#include<stdio.h> 

void main() 
{ 
    int a,b,c,d; 
    a=b=c=d=1; 
    a=++b>1 || ++c>1 && ++d>1; 
    printf("%d%d%d%d",a ,b ,c ,d); 
} 

在gcc编译上面的代码的答案是,任何人都可以解释我为什么是这样呢?谁能exlpain我这个代码的答案在C

+5

阅读有关运算符优先级和* short-circuit评估*。但我会依法限制使用此代码作者的计算机。 –

+1

'++ b'将'b'增加到'2',所以b现在是'> 1',所以整个表达式变为真,所以'1'被分配给'a'。 'c'和'd'保持不变,因为不需要评估其余的表达。 –

+0

@EugeneSh。它不是指懒惰的编程语言? –

回答

3

这里a=++b>1 || ++c>1 && ++d>1;这条线将作为

关联性操作的 ||
a=((++b>1) || ((++c>1) && (++d>1))); according to precedence. 

执行从左到右,所以(++b>1)将首先执行,然后b被递增到2||操作的左侧将变得true,所以右侧不会执行,c,d保持不变。

相关问题