5

ビット単位の操作でいくつかのテストを行う/JavaScriptでシフトする

0x80000000 >> 1 // returns -1073741824 (-0x40000000)

私はそれが 0x40000000 を返すことを期待します

0x40000000 >> 1 // returns 0x20000000
0x20000000 >> 1 // returns 0x10000000
4

2 に答える 2

10

算術シフトであるため、論理シフトを使用するために符号が保持されます>>>

0x80000000 >>> 1 // returns 1073741824 (0x40000000)
于 2012-12-27T22:23:32.000 に答える
4

Javascript では>>Signed Right Shift Operatorです。言語仕様の §11.7.2 では、次のように述べられています。

右オペランドで指定された量だけ、左オペランドでビットごとの符号充填右シフト演算を実行します。

シフトが完了する前に、左側のオペランドが符号付き 32 ビット整数に変換されます (仕様で指定されているアルゴリズムのステップ 5)。あなたの場合、この変換により、指定された正の数が負の値に変わります。その後、実際のシフトが行われ、値の負の符号が保持されます。

于 2012-12-27T22:43:57.883 に答える