値が充分に小さいのであれば問題ないのだが、この値に近いもしくは、この値を超える数値を扱うなら、ビット演算による整数化はやるべきではない。 原因 このような問題が起きる原因は、Number型が保持できる値と、ビット演算が取り扱える値の差にある。大きな数値を普通に変数に代入できたと安心していると、痛い目を見ることになるのだ。 Number型の値は"1.79E+308"まで保持できるのだが、ビット演算は(おそらく32ビットブラウザにおいて)、32ビット内(-2,147,483,648 〜 2,147,483,647)でしか計算ができないため、それ以上の値(ビット)を切り落としてしまうようだ。 Number.MAX_VALUE - JavaScript | MDN (Number.MAX_VALUE).toString(2) // -> "11111111111111111111111111111