JavaScriptのビットシフトではまった

ちょっと引っかかったのでメモ。

以下のコードのようにビットシフトを行うと、符号付き整数として扱われる。

console.log( 1 << 30 );                 // 1073741824
console.log( 1 << 31 );                 // -2147483648

これは、"<<"演算子が符号付き整数に定義されているためである。

符号なし整数としてあつかう場合は、符号なし整数に定義された”>>>”演算子(符号なし右シフト)で0ビットシフトすればよい。

console.log( ( 1 << 31 ) >>> 0 ); // 2147483648