これはビットごとの AND演算子です。コンピューターでは、すべての整数が 2 進数形式で格納され、最下位の 2 進数が 2^0 == 1 であることを思い出してください。したがって、すべての奇数は最下位の 2 進数 = 1 になります。
したがって、ビットごとの AND 演算子は、値をビットごとに定数と比較します1。1両方のオペランドにあるビットは結果で に設定されますが、いずれかのオペランドにあるビットは結果で に設定さ1れます。最終結果 ( または のいずれか) は、ステートメントの句として使用しているため、PHP によってブール値に強制されます。0010if()
&の代わりに均一性をチェックする非常に正当な理由があります%: Speed! 演算子は%除算演算を必要とするため、剰余を計算できます。これは、ビットを直接比較するよりも計算コストがはるかに高くなります。
例:
$num = 9; // 9 == 8 + 1 == 2^3 + 2^0 == 1001b
echo (string)($num & 1); // 1001b & 0001b = 0001b - prints '1'
$num = 10; // 10 == 8 + 2 == 2^3 + 2^1 == 1010b
echo (string)($num & 1); // 1010b & 0001b = 0000b - prints '0'