今まで奇数と偶数判定は %
演算子を使用したものが一般的と思っていた。
$var = 1;
if ($var % 2 === 0) {
echo '偶数';
} else {
echo '奇数';
}
だが、PHPマニュアルのarray_filterの項目を見ていたら、見慣れない奇数・偶数判定をしている。
function odd($var)
{
// 渡された整数が奇数かどうかを返します
return($var & 1);
}
function even($var)
{
// 渡された整数が偶数かどうかを返します
return(!($var & 1));
}
この &
で指定されている判定はビット単位のAND演算子で、値をビット毎に定数の1と比較しているらしい。またこっちの判定方法の方が%
を使うよりも高速に動作するとのこと。
Odd and Even numbers (using & or %)
個人的には見慣れなかったので可読性は悪くなりそうだけど、AND演算子での指定も選択肢の一つとして留めておこうと思う。