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

时间:2019-02-17 14:42:29

标签: c logical-operators operator-precedence

我在使用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具有后增量),因此= 0,y = 1。

我如何理解我的问题2;我相信我错过了一些事情。

1 个答案:

答案 0 :(得分:3)

||&&都强制执行从左到右的评估。 &&的优先级高于|| 1 ,因此a || b && c被解析为a || (b && c)。请记住,对于a || b,如果a不为零,则表达式的结果为1,而与b的值无关,因此b不会被求值。因此,在表达式a || (b && c)中,如果a不为零,则不会计算(b && c)

因此,在给定a = 10 || x++ && ++y的情况下,10非零,这意味着无论x++ && ++y的结果如何,表达式的结果均为1,因此x++++y # list of unique teams (assuming home and away teams are identical) teams = liga2['HomeTeam'].unique() # create the dataframe df = pd.DataFrame(index=teams, columns=['home_goals','away_goals']) # for each team, populate the df with the sum of their home and away goals for team in teams: df.loc[team,'home_goals'] = liga2[ liga2.HomeTeam == team ].FTHG.sum() df.loc[team,'away_goals'] = liga2[ liga2.AwayTeam == team ].FTAG.sum() 被评估。


  1. 仅优先级 控制表达式的解析方式(哪些运算符与哪些操作数分组)-控制表达式的求值顺序。