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で除算するだけです)。これは、たまたま多くの言語に存在し、数値の 2 進数表現を操作するビット演算子の 1 つです。ほとんどの場合、除算よりも高速であるため、パフォーマンス上の理由からよく使用されます。

于 2012-06-07T13:06:13.677 に答える