如何理解背靠背运营商的行为?

How to understand the behavior of back to back operators?

虽然这是基本问题,但我对使用 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 有 post 增量)因此 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++ && ++y10 是非零的,这意味着无论 x++ && ++y 的结果如何,表达式的结果都将为 1,所以 x++ ] 和 ++y 都没有评估。


  1. 优先级 控制表达式的解析方式(哪些运算符与哪些操作数分组)——它控制表达式的解析顺序表达式被评估。