抄自:https://www.cnblogs.com/zt007/p/7169735.html?utm_source=itdadao&utm_medium=referral
>>>
与>>
是位运算符,只对整型有效(不能用于浮点型)。
当是整型的时候(low+high)>>1
可以代替(low+high)/2
。>>>
是无符号右移运算符。如果low+high
是正整数,这三种运算是等价的。
由于有编译器优化,他们的效率应该是相同的(如果不存在编译器优化,移位运算更快)。
用>>>
一般是有特殊的目的。
至于>>>
和>>
的区别,则在于有符号和无符号。比如-2>>>1
的结果是2147483647
,而-2>>1
的结果是-1
。(其中2147483647
是-2
的补码右移一位后,左边补0的结果。)
这里计算平均值使用>>>
取代>>
,恐怕是因为可能出现很大的数字,这些数字单独用不会超过Integer.MAX_VALUE
,但求和之后可能超过,这时如果使用>>
或者/
来计算,会因为溢出而算出负数结果。
用下面的程序可以说明问题: