ちょっと引っかかったのでメモ。 以下のコードのようにビットシフトを行うと、符号付き整数として扱われる。 console.log( 1 << 30 ); // 1073741824 console.log( 1 << 31 ); // -2147483648 これは、"<<"演算子が符号付き整数に定義されているためである。 符号なし整数としてあつかう場合は、符号なし整数に定義された”>>>”演算子(符号なし右シフト)で0ビットシフトすればよい。 console.log( ( 1 << 31 ) >>> 0 ); // 2147483648