ビット単位の操作でいくつかのテストを行う/JavaScriptでシフトする
0x80000000 >> 1 // returns -1073741824 (-0x40000000)
私はそれが 0x40000000 を返すことを期待します
0x40000000 >> 1 // returns 0x20000000
0x20000000 >> 1 // returns 0x10000000
ビット単位の操作でいくつかのテストを行う/JavaScriptでシフトする
0x80000000 >> 1 // returns -1073741824 (-0x40000000)
私はそれが 0x40000000 を返すことを期待します
0x40000000 >> 1 // returns 0x20000000
0x20000000 >> 1 // returns 0x10000000
Javascript では>>
、Signed Right Shift Operatorです。言語仕様の §11.7.2 では、次のように述べられています。
右オペランドで指定された量だけ、左オペランドでビットごとの符号充填右シフト演算を実行します。
シフトが完了する前に、左側のオペランドが符号付き 32 ビット整数に変換されます (仕様で指定されているアルゴリズムのステップ 5)。あなたの場合、この変換により、指定された正の数が負の値に変わります。その後、実際のシフトが行われ、値の負の符号が保持されます。