虽然这是基本问题,但我对使用 AND 和 OR 感到困惑。我了解在使用 AND 和 OR 逻辑运算符时存在短路方法。
Assume int a,x=0,y=0;
a). a= 10 && ++x && y++
Values a=0,x =1,y=1 [expected ]
b). a= 10 && ++x || y++
Values a=1 ,x=1,y=0 [short circuit
,expected ]
c). a= 10 || ++x || y++
Values a=1 , x=0, y=0 [short
circuit ]
我的问题是:
a = 10 && y++
Values a =0, x=0(default didn't change ), y=1 [ expected no short circuit y is incremented later and hence a =0 ]
引用问题1。
a = 10 || ++x && y++
实际值:
a=1, x=0,y=0
我的预期:
a = 0, x=0, y=1
解释:10 ||++x(短路)
所以我仍然使用 a = (1 && y++) => a=0(没有短路,并且 y 有后增量)因此 a =0,y=1。
如何理解我的问题2;我想我错过了什么。
最佳答案
||
和&&
都强制从左到右求值。 &&
的优先级高于 ||
1,所以 a || b && c
被解析为 a || (b && c)
。请记住,使用 a || b
,如果a
不为零,那么无论b
的值如何,表达式的结果都是1,所以b
根本不被评估。所以在表达式 a || (b && c)
,如果 a
不为零,则 (b && c)
不被计算。
所以,给定 a = 10 || x++ &&++y
,10
是非零的,意思是无论x++ &&++y
的结果如何,表达式的结果都是1,所以 x++
和 ++y
都不会被评估。
- 优先级仅控制表达式的解析方式(哪些运算符与哪些操作数分组)——它不控制表达式求值的顺序。
关于c - 如何理解背靠背运营商的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734345/