-1

PHP では、次のオペランドはどのように機能しますか?

^ |

例えば$a = 11; $b = 7; echo $a ^ $b;

出力 12

    $a =    11;
$b =    7;
echo $a | $b;

出力 15

いずれの場合も理由はわかりません。誰かが光を当てることができますか?

4

3 に答える 3

4

それらはビットごとのXORORです。

$a = 11; // 1011
$b =  7; // 0111

XORを使用すると、$aとが異なる各ビットが に$bなり1、同じビットが になります0

$a ^ $b: // 1100 = 12

ORを使用すると、各ビットが1またはになり、この場合はすべてのビットになります。$a$b1

$a | $b: // 1111 = 15

ANDに相当するものもあります。$a & $b: // 0011 = 3

PHP のビット演算子の完全なリスト

于 2012-05-09T21:41:49.540 に答える
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.';
于 2012-05-09T21:39:37.563 に答える
0

これらはビット単位の演算子です。つまり、2 進数を操作します。

111011バイナリで、7です0111

^ですXOR。両方の値の各ビットについて、異なる場合は 1 を返します。

11 ^ 7 = 1011 ^ 0111 = 1100 = 12

|ですOR。両方の値の各ビットについて、少なくとも 1 つが 1 の場合は 1 を返します。

11 | 7 = 1011 | 0111 = 1111 = 15

詳細: http://php.net/manual/en/language.operators.bitwise.php

于 2012-05-09T21:44:43.283 に答える