(a + b)>> 1是什么意思?

Zeb*_*ebs 4 c++ operators

int c = (a+b) >>1C++ 中的意思是什么?

Chr*_*ung 18

它返回的平均ab,四舍五入.所以,如果a是5并且b是8,那么结果是6.

ETA:如果a并且b加起来为负数,则此方法被破坏,如果两者都为负,或者发生整数溢出.

  • @Quartz:有些人认为它是微优化,因为他们认为编译器无法正确处理`/ 2`.我当然不同意. (17认同)
  • `>> 1`是一种特别hack-y的除以2的方法,因为它向右移位1. (13认同)
  • 一般情况下不正确.由于`a + b`可以是负数,因此`>>`的行为是实现定义的. (2认同)
  • @Chris是的,但是当你写>> 1时,看起来你更聪明:) (2认同)

AnT*_*AnT 12

注意,不能有你的代码是什么意思任何有意义的解释,直到你解释什么是ab是.

即使ab是内置式的,提防不正确的答案无条件地声称内置右移是2的等价只适用于非负值等同于分裂.>>负值的运算符的行为是实现定义的.

换句话说,没有额外的信息,唯一可以说的是代码计算"总和" a + b并将其"右移"1位.我因为在重载运算符的情况下使用引号中的最后一句话+,并>>没有办法来预测他们在做什么.


ybu*_*ill 6

这取决于c,a和b的类型.如果是int,则上述语句与以下语句相同:

c = (a+b)/2;
Run Code Online (Sandbox Code Playgroud)

>> 意味着向右移一位.

  • 它没有说a和b是什么. (5认同)
  • 不,它们可能是用户定义的类型. (4认同)