我使用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 ]
我的问题是:
Values a =0, x=0(default didn't
change ), y=1 [ expected no short
circuit y is incremented later and
hence a =0 ]
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
is解析为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
。