为什么降低优先级运算符首先执行?
可能重复:
运算符优先级问题
我们知道前缀的优先级大于“LOGICAL AND”( &&
),“LOGICAL AND”的优先级大于“LOGICAL OR”( ||
)。
以下程序似乎违反了它:
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上也是相同的。
&&
和||
运营商正在“短路”。 也就是说,如果左边的值对于&&
是FALSE,对于||
则是TRUE 然后不执行右边的表达式(因为不需要确定整个表达式的值)。
这是正确的,因为短路定义。
m = ++i||++j&&++k
首先,左边的部分++ i总是为TRUE所以现在我是-2并且它不执行表达式的正确部分,j,k的值不会改变。