ビット演算を使う

普段の仕事ではビット演算を使用する機会が無い。Flash 8 以降で凝った画像処理をするには必要なのだが、それはさておき……。身近な所では、偶奇を判定する方法にビット演算が使えそうだ。

通常「2 で割った余りが 0 ではない」数字を奇数と定義する。

function isOddA(n) {
return ((n % 2) != 0);
}

ビットで考えると「1 との論理積が 1 となる」数字が奇数なので

function isOddB(n) {
return ((n & 1) == 1);
}

このように書ける。通常、ビット演算は高速だと言われるが、スクリプト言語でも速くなるのかを実験してみる。以下は、かなりいい加減なベンチマーク関数である。

function benchMark(algorism) {
var time = (new Date()).getTime();
for (var i = 0; i < 30000; i++) {
var hoge = algorism(1);
}
document.write((new Date()).getTime() - time);
}

この関数に各アルゴリズムを数回通したところ、以下のような結果が得られた。

benchMark(isOddA); //730前後
benchMark(isOddB); //700前後

僅かにだが、ビット演算の方が速い。