JavaScriptトリプルより大きい


88

私は別のStackOverflowの投稿でこの構文を見て、それが何をするのか興味がありました:

var len = this.length >>> 0;

どういう>>>意味ですか?


1
これは右シフト演算子ですが、なぜゼロだけ右シフトするのでしょうか。それはある種の安価な方法parseIntですか?
ロケット危険物2011年

5
>>>ゼロビットだけシフトした場合でも、常に符号ビットをゼロに設定します。
ジョンフラットネス2011年

4
この答えをチェックし、なぜ彼らは、この場合に使用>>>演算子を:stackoverflow.com/questions/3081987/...
クリスチャンC.Salvadó

1
JavaScriptトリプルアングルブラケット
wprl 2013年

私はdeveloper.mozilla.org/en/docs/Web/JavaScript/Reference/…で その構文を見ましたvar length = list.length >>> 0; (あなたのものと同じユースケース)
Mars Robertson

回答:


49

これは符号なしの右シフト演算子です。興味深いことに、JavaScriptで符号なしのビット演算子はこれだけです。

>>>演算子は、expression1のビットをexpression2で指定されたビット数だけ右にシフトします。左からゼロが入力されます。右にシフトされた数字は破棄されます。


107

その意図された意味を無視すると、これはおそらくそれが使用されているのを見る場所です:


>>> 0 は、任意の型を正の整数に変換する唯一の演算子であるという点で独特です。

"string"         >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3]        >>> 0 == 0
Math.PI          >>> 0 == 3

あなたの例ではvar len = this.length >>> 0、これは、thisタイプthis.lengthが何であれ、反復処理に使用する整数の長さを取得する方法です。


同様に、~~x任意の変数を符号付き整数に変換するために使用できます。


を使用して反復する方法を説明できます>>>か?

1
@ K48私は彼が繰り返すことを意味したとは思わない、私は彼がこれが長さを数にすることを強制すると言うつもりだったと思う。(そうでなければ、私も同様に混乱しています。)しかし、これはさらに解明する素晴らしい答えです: stackoverflow.com/questions/1822350/…–
Mike Williamson

8

その演算子は論理的な右シフトです。ここで、数値は0ビットシフトされます。数学的にゼロビットをシフトしても効果はありません。

ただし、ここでは、値を符号なし32ビット整数に変換するために使用されます。


3

>>>はビット単位の演算子で、右シフトをゼロで埋めます

>>> 0正の数に対する唯一の影響は、と同じように、最も近い整数に切り捨てることだと思いますMath.floor()。一般に.lengthプロパティ(例:のArray)はすでに整数であるため、これがあなたの例で必要になる理由はわかりません。

~~同じように使用されるわずかに短いものも見ました:~~9.5 == 9; // true


Math.abs()負の数に使用した場合と同じではないかと思います。
アルケップ2011年

6
そうした場合>>> 0、それは2の補数に変換し、負の数に、右シフトはありません。したがって-14 >>> 0 == 1073741820。(msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx
ロケット危険物

@ AlKepp-うん、エラーを見て修正した-最初にテストする必要があったが、これは明らかにクイックドローの質問だった:)。
nrabinowitz 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.