<<0 と | 0 、どっちが速いか

TwitterのTLみてたら、[twitter:@ginpei_jp]さんが、JSに関する興味深いエントリを書いていたのを見つけた。

少数値を整数値に直すのに、ビット演算を用いることはJS界では有名なことで、個人的には不思議な挙動ではあるけども俺も多用している。
ただ、俺はOR( | )ではなくSHIFT ( << )を使っており、この2つに速度的な差があるのか、というのが気になった。
というわけで、せっかくなので調べてみた。

jsdo.itという兵器

自前でコード起こして、サイトにアップしてーとかやってるのが手間だったので、jsdo.itのちからを借りることにした。
自分の環境でテストした感想は、該当ページのREADMEにまとめたが、あまりに実行環境によって結果差が大きい。
Windows7ではことごとくOR演算が早く、MacOSX Lionでは逆にOR演算が少し遅い。
しかし、1千万回forループしてこの時間ということは、純粋にビット演算の時間だけみたらカウントのしようがないくらい微々たるものなので、[twitter:@ginpei_jp]さんの言うとおり、大差ない、という結論でいいんじゃないだろうか。

データ

Windows7 32bits ( Core 2 Duo E8600 3.3GHz )

IE9

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) 106.157 1.006
Right Shift ( >> 0 ) 106.864 1.012
OR ( ¦ 0 ) 105.513 1.000

Firefox

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) 24.165 1.001
Right Shift ( >> 0 ) 24.154 1.001
OR ( ¦ 0 ) 24.127 1.000

Chrome

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) 29.677 1.017
Right Shift ( >> 0 ) 29.589 1.014
OR ( ¦ 0 ) 29.172 1.000

Opera

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) 221.647 1.024
Right Shift ( >> 0 ) 222.954 1.030
OR ( ¦ 0 ) 216.333 1.000
MacOSX Lion ( Quad-Core Intel Xeon 2.8 GHz )

Safari

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) ? ?
Right Shift ( >> 0 ) ? ?
OR ( ¦ 0 ) ? ?

Firefox

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) 34.555 1.000
Right Shift ( >> 0 ) 40.397 1.169
OR ( ¦ 0 ) 34.554 1.000

Chrome

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) 30.28 1.000
Right Shift ( >> 0 ) 30.252 1.000
OR ( ¦ 0 ) 33.632 1.111

Opera

ビット演算 所要時間(msec) 最速を1とした時の比
Left Shift ( << 0 ) ? ?
Right Shift ( >> 0 ) ? ?
OR ( ¦ 0 ) ? ?