`>>是什么1'是什么意思?

时间:2011-09-17 05:32:02

标签: javascript underscore.js

我正在阅读underscore.js代码。我发现了这个:

var mid = (low + high) >> 1;

>> 1做什么?为什么有用?

4 个答案:

答案 0 :(得分:7)

它将左侧的位向右移位一位。相当于除以2。

在'Ye olden times'中,这比简单划分更快,但我怀疑它会在下划线的情况下产生很大的不同。

答案 1 :(得分:1)

这是一个按位正确的转变。对于整数,它相当于除以2;对于JavaScript数字,它与Math.floor((low + high) / 2)大致相同,但完全避免浮点数。

答案 2 :(得分:1)

>>是传播右移运营商的标志。它将(low + high)的位模式向右移动1位置,最左边的位复制到左侧位置。它实际上与Math.floor((low + high) / 2)相同。

如果我没有指出使用(low + high) >> 1来计算二进制搜索中数组的中点可能导致溢出的细微错误,那将是我的疏忽。 (low + high) >>> 1其中>>>为零填充右移运算符,没有溢出错误。

答案 3 :(得分:0)

可能会将值保持为整数。在这里除以2可能会在某些情况下将结果转换为浮点数,例如,如果(low + high)为奇数。

这两项操作并不完全相同:

> (5+2)/2
3.5
> (5+2)>>1
3

但是,对于这种特殊用途,有better idioms用于查找两个数字的中点。