質問: PHPのビット演算子である&がよく理解できません。マニュアルによると$a & $bは ``` $a および $b の両方にセットされているビットがセットされます ``` こうあります。マニュアルにあるコードを例にあげると ``` function odd($var) { // 渡された整数が奇数かどうかを返します return($var & 1); } ``` この関数は、$varが奇数の時にTRUEを返すのですか? また、($var & 1)の部分ですが $varが奇数であれば、2進数の最下位ビット(LSB)が1になるのは理解できます。 例えば、$varが5だったら2進数では101になり、1は2進数でも1のままです。 そうだとすると、「101 & 1」という意味ですか? この&は最下位ビットが同じかどうかを比較しているのでしょうか? 教えていただけるとうれしいです。
回答: > > この&は最下位ビットが同じかどうかを比較しているのでしょうか? > > > 違います。`6 & 3`を考えてみると、 6: 00000110 3: 00000011 ------- &: 00000010 (両方が1の時だけ1になる) 結果は非ゼロ(2)なので、真か偽かというと真になります。 あくまで、対応するビット同士のandを取って、数値を返す演算です。 その数値の結果を「真か偽か」つまり「非ゼロかゼロか」と判断するのはその先の話です。 「非ゼロかゼロか」という判断では無く「2に等しいか?」等という判断をする事もあります。