PHP では、次のオペランドはどのように機能しますか?
^ |
例えば$a = 11;
$b = 7;
echo $a ^ $b;
出力 12
と
$a = 11;
$b = 7;
echo $a | $b;
出力 15
いずれの場合も理由はわかりません。誰かが光を当てることができますか?
$a = 11; // 1011
$b = 7; // 0111
XORを使用すると、$a
とが異なる各ビットが に$b
なり1
、同じビットが になります0
。
$a ^ $b: // 1100 = 12
ORを使用すると、各ビットが1
またはになり、この場合はすべてのビットになります。$a
$b
1
$a | $b: // 1111 = 15
ANDに相当するものもあります。$a & $b: // 0011 = 3
これらはビット単位の演算子です。
http://php.net/manual/en/language.operators.bitwise.php
基本的にこれらはバイナリデータに使用されます。これらは、単一の整数内で一連のフラグを組み合わせるために非常に頻繁に使用されます。たとえば、2 つのフラグがあるとします。
FLAG1 = (binary)'1' = (integer)1
FLAG2 = (binary)'10' = (integer)2
ビット単位の演算子を使用して 2 つを組み合わせることができます。
$combined_flags = FLAG1 | FLAG2 = (binary)'11' = (integer)3
次に、ビットごとの演算子を使用して、フラグの 1 つが設定されているかどうかを確認できます。
if ($combined_flags & FLAG1) echo 'flag 1 is set to true.';
これらはビット単位の演算子です。つまり、2 進数を操作します。
11
は1011
バイナリで、7
です0111
。
^
ですXOR
。両方の値の各ビットについて、異なる場合は 1 を返します。
11 ^ 7 = 1011 ^ 0111 = 1100 = 12
|
ですOR
。両方の値の各ビットについて、少なくとも 1 つが 1 の場合は 1 を返します。
11 | 7 = 1011 | 0111 = 1111 = 15