可能重复:
why “++x || ++y && ++z” calculate “++x” firstly ? however,Operator “&&” is higher than “||”
如果您查看C的优先级表,您将看到&&具有较高的优先级。
但是看看下面的代码:
a=b=c=1;
++a || ++b && ++c;
printf("%d %d %d\n",a,b,c);它打印出“21 1",这意味着首先计算"++a”,一旦程序在那里看到一个真,它就会停在那里,因为在另一边的情况并不重要。
但是,既然&&具有较高的优先级,那么不应该先计算"++b && ++c“,然后再将结果插入到"++a维希”中吗?(在这种情况下,程序将打印“12 2")。
发布于 2011-09-22 21:23:31
试着用括号想象一下:
++a || ++b && ++c;等于
(++a) || (++b && ++c);它是从左到右计算的。
如果&&并具有相同的优先级,则如下所示
(++a || ++b) && (++c);发布于 2011-09-22 21:20:30
优先规则只说明它将按以下方式进行评估:
++a || (++b && ++c);现在出现了逻辑运算符的短路行为,它说,必须从左到右计算项,并在知道结果时停止。右边的部分永远不会被执行。
发布于 2011-09-22 21:48:17
评价的先后顺序是完全不同的两件事。对于逻辑运算符表达式,求值总是从左到右.表达式++a || ++b && ++c被解释为
表达式被解析为++a || (++b && ++c);如果子表达式++a或++b && ++c之一为真,则整个表达式为true。
https://stackoverflow.com/questions/7521607
复制相似问题