PHPの偶奇判定と&演算子


PHPで偶数か奇数かを判定する際に
http://www.php.net/manual/ja/function.array-filter.php
にて&演算子が用いられていますが,この処理の意味が不明です。
どういう具合で偶奇判定が行われているのか教えていただけますでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/08/27 14:26:08
  • 終了:2012/08/27 14:46:42

ベストアンサー

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472012/08/27 14:42:29

「&」はビット演算子です。
PHP: ビット演算子 - Manual

「1」という整数値は、最下位のビットが 1 で、残りのビットが 0 ですから、「1」という数値との
「&」によるビット演算の結果は、

  • 最下位のビット以外のビットはすべて 0
  • 最下位のビットは、ビット演算の相手の最下位ビットが 0 なら 0、1 なら 1

となるので、演算の結果は 0 か 1 になります。

で、「1」とビット演算を行う相手の数値の最下位ビットが 1 である、という事は、その値が奇数の時、逆に最下位ビットが 0 の時は、その値が偶数の時になるので、

  • 元の値が奇数なら、演算結果は 1
  • 元の値が偶数なら、演算結果は 0

になります。

で、php で整数型から論理型への変換で
PHP: 論理型 (boolean) - Manual

  • 値が 0 の時は false
  • 値が 0 以外の時は true

なので、

function odd($var)
{
    // 渡された整数が奇数かどうかを返します
    return($var & 1);
}

  • $val が奇数の時は true
  • $val が偶数の時は false

となります。

id:mikakane

ビット演算だったんですね。盲点でした。ありがとうございます!!

2012/08/27 14:47:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません