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
#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
这里a=++b>1 || ++c>1 && ++d>1;
这条线将作为
||
a=((++b>1) || ((++c>1) && (++d>1))); according to precedence.
执行从左到右,所以(++b>1)
将首先执行,然后b
被递增到2
和||
操作的左侧将变得true
,所以右侧不会执行,c,d
保持不变。
阅读有关运算符优先级和* short-circuit评估*。但我会依法限制使用此代码作者的计算机。 –
'++ b'将'b'增加到'2',所以b现在是'> 1',所以整个表达式变为真,所以'1'被分配给'a'。 'c'和'd'保持不变,因为不需要评估其余的表达。 –
@EugeneSh。它不是指懒惰的编程语言? –