低+(高 - 低)/ 2比(低+高)/ 2便宜

时间:2016-07-15 11:42:58

标签: java

我正在编写一个二进制搜索算法,我需要计算mid元素。有两种方法可以获得两个中间元素,例如:

low+(high-low)/2

(low+high)/2

似乎低+(高 - 低)/ 2比(低+高)/ 2更有效,为什么?

1 个答案:

答案 0 :(得分:-1)

我找到了答案here

假设高和低都是非负的,我们肯定知道最高位(符号位)为零。

因此,高和低都是31位整数。

high = 0100 0000 0000 0000 0000 0000 0000 0000 = 1073741824
low  = 0100 0000 0000 0000 0000 0000 0000 0000 = 1073741824

当你将它们加在一起时,它们可能会“溢出”到顶部位。

high + low =       1000 0000 0000 0000 0000 0000 0000 0000
           =  2147483648 as unsigned 32-bit integer
           = -2147483648 as signed   32-bit integer

(high + low) / 2   = 1100 0000 0000 0000 0000 0000 0000 0000 = -1073741824
(high + low) >>> 1 = 0100 0000 0000 0000 0000 0000 0000 0000 = 1073741824