30

重複の可能性:
javascript >>>演算子?
JavaScriptトリプルより大きい

このようなコード行でこの演算子が見つかりました:

var t = Object(this),
        len = t.length >>> 0;

この演算子はどういう意味ですか?

完全なコードは以下のとおりです。これはJSsomeメソッドのコードです。

if (!Array.prototype.some) {
  Array.prototype.some = function(fun /*, thisp */) {
    "use strict";

    if (this == null) throw new TypeError();

    var t = Object(this),
        len = t.length >>> 0;

    if (typeof fun != "function") throw new TypeError();

    var thisp = arguments[1];

    for (var i = 0; i < len; i++) {
      if (i in t && fun.call(thisp, t[i], i, t))
        return true;
    }

    return false;
  };
}
4

2 に答える 2

49

>>>符号拡張なしの右シフトです

負の数で演算子を使用する>>と、元の符号ビットがすべての新しいビットにコピーされるため、結果も負になります。ゼロを指定すると>>>、代わりにコピーされます。

この特定のケースでは、lengthフィールドを符号なし31ビット整数に制限する方法、つまりJavascriptのネイティブIEEE754「double」数値を整数に「キャスト」する方法として使用されています。

于 2012-04-30T10:28:12.050 に答える
4

これはゼロフィルの右シフトです。数値をビットシフトする場合、左端のビットをゼロで埋めるか、符号ビットで埋めるかを決定できます。

2の補数表現では、負の数は先頭ビットとして1を持ち、正の数は0を持ちます。したがって、「符号拡張」(代わりにゼロで埋める)を行わずに負の数をシフトすると、結果は正数。

于 2012-04-30T10:29:36.950 に答える