C 如何理解背靠背操作员的行为?
我在使用和或虽然这是一个基本问题,但我有很多困惑。我知道在使用AND或逻辑运算符时存在短路方法C 如何理解背靠背操作员的行为?,c,logical-operators,operator-precedence,C,Logical Operators,Operator Precedence,我在使用和或虽然这是一个基本问题,但我有很多困惑。我知道在使用AND或逻辑运算符时存在短路方法 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 |
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
被解析为a | |(b&&c)
。请记住,对于a | | b
,如果a
为非零,则表达式的结果为1,与b
的值无关,因此根本不计算b
。因此,在表达式a | |(b&c)
中,如果a
为非零,则不计算(b&c)
因此,给定a=10 | x++&++y
,10
为非零,这意味着表达式的结果将为1,而不管x++&++y
的结果如何,因此既不计算x++
也不计算++y