我们知道precedence的前缀大于“LOGICAL AND”(&&
),“LOGICAL AND”的优先级大于“LOGICAL OR”(||
)。< / p>
Below program似乎违反了它:
int main()
{
int i=-3,j=2,k=0,m;
m=++i||++j&&++k;
printf("%d %d %d %d",i,j,k,m);
return 0;
}
如果++
的优先级超过&&
和||
,则应首先执行所有前缀。在此i=-2,j=3,k=1
之后,&&
将首先执行。
为什么输出显示:-2 2 0 1
?
程序的行为在ubuntu v12.04上也是一样的。
答案 0 :(得分:5)
&&
和||
运营商正在“短路”。也就是说,如果&&
左边的值为FALSE,||
左边的值为TRUE,则右边的表达式不会被执行(因为不需要确定整个表达式的值)。 / p>
答案 1 :(得分:2)
这是正确的,因为短路定义。
m = ++i||++j&&++k
首先,左边的部分++ i总是为TRUE所以现在我是-2并且它不执行表达式的正确部分,j,k的值不会改变。