在 php 中,以下操作数如何工作?
^ |
例如$a = 11;
$b = 7;
echo $a ^ $b;
输出 12
和
$a = 11;
$b = 7;
echo $a | $b;
输出 15
我不知道为什么在每种情况下。有人可以阐明一下吗?
$a = 11; // 1011
$b = 7; // 0111
通过异或,每个不同$a
的位$b
变成一个1
,相同的位变成一个0
。
$a ^ $b: // 1100 = 12
与OR中的每个位都是 a1
或成为 a $a
,在这种情况下是所有位。$b
1
$a | $b: // 1111 = 15
还有一个AND等价物:$a & $b: // 0011 = 3
它们是按位运算符。
http://php.net/manual/en/language.operators.bitwise.php
基本上这些用于二进制数据。这些经常用于在一个整数中组合一系列标志。例如,如果我有两个标志:
FLAG1 = (binary)'1' = (integer)1
FLAG2 = (binary)'10' = (integer)2
我可以使用按位运算符将两者结合起来:
$combined_flags = FLAG1 | FLAG2 = (binary)'11' = (integer)3
然后我可以检查是否使用按位运算符设置了一个标志:
if ($combined_flags & FLAG1) echo 'flag 1 is set to true.';
它们是按位运算符,这意味着它们对二进制数进行运算。
11
是1011
二进制的,并且7
是0111
.
^
是XOR
。对于两个值中的每一位,如果它们不同,则返回 1。
11 ^ 7 = 1011 ^ 0111 = 1100 = 12
|
是OR
。对于两个值中的每一位,如果至少有一个为 1,则返回 1。
11 | 7 = 1011 | 0111 = 1111 = 15
更多信息: http: //php.net/manual/en/language.operators.bitwise.php