Dan*_*cco 5 c operator-precedence logical-operators
如果你看一下C的优先级表,你会发现&&的优先级高于||.
但是看看下面的代码:
a=b=c=1;
++a || ++b && ++c;
printf("%d %d %d\n",a,b,c);
Run Code Online (Sandbox Code Playgroud)
它打印出"2 1 1",这意味着首先评估"++ a",一旦程序看到TRUE,它就会停在那里,因为在||的另一边是什么 并不重要.
但由于&&的优先级高于||,因此不应首先评估"++ b && ++ c",然后将结果插回"++ a || result"?(在这种情况下,程序将打印"1 2 2").
hel*_*s35 13
试着用括号想象它:
++a || ++b && ++c;
Run Code Online (Sandbox Code Playgroud)
等于
(++a) || (++b && ++c);
Run Code Online (Sandbox Code Playgroud)
从左到右进行评估.
如果&&和|| 它会有相同的优先级,看起来像
(++a || ++b) && (++c);
Run Code Online (Sandbox Code Playgroud)
优先规则只表示它将按如下方式进行评估:
++a || (++b && ++c);
Run Code Online (Sandbox Code Playgroud)
现在出现了逻辑运算符的短路行为,它表示您必须从左到右计算项,并在结果已知时停止.右边的部分永远不会被执行.
| 归档时间: |
|
| 查看次数: |
8438 次 |
| 最近记录: |