【发布时间】:2014-07-13 12:58:33
【问题描述】:
例如:
除以 2
int med = lo + (hi - lo) / 2;
按位右移
int med = lo + hi >>> 1;
我想知道,使用按位运算而不是除以2 有什么特别的优势吗?使用按位运算是否提供更有效或更可靠的计算?
我很想知道,因为java.util.Arrays 在执行二进制搜索时使用了按位移位。
【问题讨论】:
-
注意,您的第二个表达式假定
lo + hi永远不会因为溢出以外的任何原因为负数。如果lo为-2 且hi为0,则med将等于Integer.MAX_VALUE而不是-1。 -
@cHao 是的,好电话。在这种情况下,它只会由溢出引起。我很想知道,我更新了我的 OP 以反映这一点,因为
java.util.Arrays在执行二进制搜索时使用按位运算。
标签: java arrays bit-manipulation