【问题标题】:How to understand the behavior of back to back operators?如何理解背靠背运营商的行为?
【发布时间】:2019-02-17 14:42:28
【问题描述】:

我在使用 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】:

    ||&& 都强制从左到右进行评估。 && 的优先级高于 ||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. 优先级控制表达式的解析方式(哪些运算符与哪些操作数分组)-它控制表达式的计算顺序。

    【讨论】:

      猜你喜欢
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多