シンプルです。JavaScript では常に結果として生成される0xf12345678>>>4
はずですか? 0x1234567
これがすべてのブラウザで機能すると仮定できますか?
2 に答える
はい、ECMAScript 5 仕様に従って、>>>
オペレーターは内部ToUInt32
アルゴリズムを実行します。
仕様のセクション 11.7.3 を参照してください。
- ShiftExpression を評価した結果を lref とします。
- lval を GetValue(lref) とします。
- AdditiveExpression を評価した結果を rref とする。
- rval を GetValue(rref) とします。
- lnum を ToUint32(lval) とします。
- rnum を ToUint32(rval) とします。
- shiftCount を、rnum の最下位 5 ビットを除くすべてをマスクした結果、つまり、rnum & 0x1F を計算した結果とします。
- shiftCount ビットで lnum のゼロ埋め右シフトを実行した結果を返します。空いたビットはゼロで埋められます。結果は符号なし 32 ビット整数です。
結果は常に 32 ビット整数であることが非常に明確に示されています。
この>>>
演算子は、通常、32 ビットの符号なし整数に変換するために使用されます。たとえば、MDN はシムでそれを使用しています。例: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach#Compatibility
信頼できる仮定であるべきです。任意の JS インタープリターは0xf12345678
、操作を計算する前に、単一のオペランドとして読み取ります。あなたが安全になりたいなら、なぜ(0xf12345678)>>>4
ですか?
ここの問題の詳細: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
ビット演算子は、オペランドを 10 進数、16 進数、または 8 進数としてではなく、32 ビット (0 と 1) のシーケンスとして扱います。たとえば、10 進数の 9 のバイナリ表現は 1001 です。ビット単位の演算子は、そのようなバイナリ表現で演算を実行しますが、標準の JavaScript 数値を返します。