为什么降低优先级运算符首先执行?

可能重复:
运算符优先级问题

我们知道前缀的优先级大于“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的值不会改变。