2

在查看“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;
  }

谷歌没有返回任何结果,我以前从未见过。在此先感谢您的帮助。

4

3 回答 3

6

这是符号传播右移运算符

此运算符将第一个操作数向右移动指定的位数。右移的多余位被丢弃。最左边位的副本从左边移入。由于新的最左边的位与前一个最左边的位具有相同的值,因此符号位(最左边的位)不会改变。因此名称为“符号传播”。

于 2012-06-07T13:05:57.107 回答
2

按位移位,请参阅https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operators

于 2012-06-07T13:07:04.937 回答
1

它进行按位右移,这与整数除以 2^x大致相似(在您的示例中 - 只需除以 2 即可找到平均值)。它是一种按位运算符,碰巧存在于许多语言中,并与数字的二进制表示一起使用。它通常用于性能原因,因为它几乎总是比除法更快。

于 2012-06-07T13:06:13.677 回答