株式会社マックグラフィックアーツ

MGAスタッフブログ - マックグラフィックアーツスタッフの不定期ブログ

0と1の世界を旅しよう! [1]

bit
JavaScriptの調べ物をしていると、Mathは遅い、とよく目にします。
多くの人たちが言うんだから遅いんだろう。
んじゃ、速くするにはどうすればいいの?
これもよく目にします。ビット演算。

wikipediaによると

ビット演算(ビットえんざん)とは、ひとつあるいはふたつのビットパターンまたは二進数を個々のビットの列として操作することである。

難しいことはまあ置いておいて以下の3つをビット演算で置き換えてみます。

小数点以下切捨て
Math.floor

小数点以下四捨五入
Math.round

小数点以下切上げ
Math.ceil

var num = 3.65;
console.log( Math.floor(num) ); //-> 3
console.log( Math.round(num) ); //-> 4
console.log( Math.ceil(num) );  //-> 4

次に、それぞれをビット演算で

var num = 3.65;

/* Math.floor */
console.log( num | 0 );  //-> 3

// 他にこんな書き方もあります。
console.log( num >> 0 );  //-> 3
console.log( ~~num );    //-> 3

/* Math.floor */
console.log( 0.5 + num | 0 );  //-> 4

/* Math.ceil */
console.log( -~num );  //-> 4

きっと速くなっているんでしょう。僕のアレぐらい。

あと、処理する値がマイナスだとMathの値とビット演算の値が微妙に違うので、使うときは要注意です。が、覚えておくとビット役にたつと思います。