[JavaScript] ビット演算は32ビットまで
2012年11月28日
JavaScriptのビット演算子が正しく扱えるのは
32ビットの値の範囲だけのようです
32ビットの値の範囲だけのようです
例えば、よく自分は parseInt の替わりに ~~(1の補数を2回) をしていますが
その範囲を超えると意図したように動きません
> ~~2147483647
2147483647
> ~~2147483649
-2147483647 // 値が変わっている
(new Date()).getTime() の値を文字列と相互変換している時に気付きました
> var dateStr = String((new Date()).getTime())
> dateStr
"1354079055775"
> ~~dateStr
1164357535
蛇足: parseInt と ~~ の違い
> parseInt('')
NaN
> parseInt(null)
NaN
> parseInt(undefined)
NaN
> ~~''
0
> ~~null
0
> ~~undefined
0
Readableかはさておき、parseInt より便利なんすよねー
NaN にするならエラーにして欲しいなぁ