奇数偶数の判定に論理積を使う話

公開

つい先程@Takazudoさんのつぶやきを見て、なんとなくプログラミングのセンスってどういう事ですか? プログラミングはとりあえずその... - Yahoo!知恵袋を読んだのですが、回答の中でnekomimimaidenさんが、奇数偶数の判定をするのに数字nを1で論理積とって1なら奇数という話を出されていました。

恥ずかしながら知らなかったのでどういうことか考えてみたのですが、次のようなことなのでしょうか...? 数値を2進数に変換してビット演算をしてみました。

# 1 & 1 
    1
AND 1
  = 1 ∴奇数
# 2 & 1
    10
AND 01
  = 00 ∴偶数
# 3 & 1
    11
AND 01
  = 01 ∴奇数
# 4 & 1
    100
AND 001
  = 000 ∴偶数
# 5 & 1
    101
AND 001
  = 001 ∴奇数

書いていて気付いたのですが、2進数で奇数を表した場合、最後の1桁は必ず1なんですね。

HTML5 Conference 2013のセッションで、数値を整数化する際はMath.floorを使わなくてもn | 0のようにビット演算でできる、という話と同じぐらい興味深かったです。これからは、JavaScriptなどで奇数偶数の判定をする時は、論理積を使ってみようと思いました。

JavaScriptのサンプルコード

%(剰余演算子)を使う場合より見通しが良いですね。ただ、論理積が分からない人が読むと処理が理解できない恐れも。

var x;

// xに対する何らかの処理...

// 奇数偶数の判定
if (x & 1) {
	// 奇数の場合の処理
} else {
	// 偶数の場合の処理
}

// もしくは偶数の判定
if (!(x & 1)) {
    // 偶数の場合の処理
}

参考