如何理解背靠背操作员的行为?

问题描述 投票:1回答:1

我使用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 ]

我的问题是:

  1. 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 ]
  2. 参考问题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;我相信我错过了什么。

c logical-operators operator-precedence
1个回答
3
投票

||&&都强制进行从左到右的评估。 &&优先于||1,所以a || b && cis解析为a || (b && c)。请记住,使用a || b,如果a非零,那么无论b的值如何,表达式的结果都是1,因此b根本没有被评估。因此在表达式a || (b && c)中,如果a不为零,则不评估(b && c)

因此,给定a = 10 || x++ && ++y10不为零,意味着无论x++ && ++y的结果如何,表达式的结果都将为1,因此不评估x++++y


  1. 优先级仅控制表达式的解析方式(哪些运算符与哪些操作数组合在一起) - 它不控制表达式的计算顺序。

© www.soinside.com 2019 - 2024. All rights reserved.