在查看“Crossfilter”来源时,我遇到了一个使用>>的函数。以下是功能:
// Similar to bisectLeft, but returns an insertion point which comes after (to
// the right of) any existing entries of x in a.
//
// The returned insertion point i partitions the array into two halves so that
// all v <= x for v in a[lo:i] for the left side and all v > x for v in
// a[i:hi] for the right side.
function bisectRight(a, x, lo, hi) {
while (lo < hi) {
var mid = lo + hi >> 1;
if (x < f(a[mid])) hi = mid;
else lo = mid + 1;
}
return lo;
}
Google没有返回任何结果,我以前从未见过这个。在此先感谢您的帮助。
答案 0 :(得分:6)
这是sign-propagating right shift operator:
该运算符将第一个操作数移位指定的位数 正确的。向右移位的多余位被丢弃。副本 最左边的位从左边移入。自新 最左边的位与前一个最左边的位,即符号具有相同的值 位(最左边的位)不会改变。由此得名 “签传播”。
答案 1 :(得分:2)
答案 2 :(得分:1)
它按向右移位,大致类似于整数除以2 ^ x(在您的示例中 - 只需除以2即可找到平均值)。它是bitwise operators中的一个碰巧存在于许多语言中并使用数字的二进制表示。它通常用于性能原因,因为它几乎总是比分割更快。