按位运算符XOR('^')如何工作?

当我看到以下代码的输出时,我有点困惑:

$x = "a";
$y = "b";
$x ^= $y;
$y ^= $x;
$x ^= $y;
echo $x; //Got b
echo $y; //Got a

如何操作^在这里工作?


这看起来像使用XOR交换一个值。 虽然我不确定PHP中的字符串(通常用于整数或某物)。 对于XOR的真值表,你可以看看这里。

关于XOR的有趣之处在于它是可逆的:XOR B XOR B == A ...不适用于ANDOR 。 由于这个事实,它可以用于你的例子中交换两个值:

$x ^= $y;
$y ^= $x;
$x ^= $y;

手段:

$x = $x ^ $y
$y = $y ^ ($x ^ $y)                // = $x
$x = ($x ^ $y) ^ ($y ^ ($x ^ $y))  // = $y

^是“独占”或“位运算符”。 它的英文是“或者”。 当且仅当两个位不同时结果为1:

1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0

稍微简化示例(并使用伪代码):

$x = 0011 //binary
$y = 0010

$x = $x xor $y
//Result: x = 0001

//x = 0001
//y = 0010
$y = $y xor $x
//Result: y = 0011

//x = 0001
//y = 0011
$x = $x xor $y
//Result: x = 0010

PHP所做的一切就是将字符串“a”和“b”视为它们的整数等价物。


在这个例子中,当你使用^字符时,它们被转换为整数。 所以

"a" ^ "b"

是相同的:

ord("a") ^ ord ("b")

有一个例外。 在第一个例子中,结果被转换回一个字符串。 例如:

"a" ^ "6" == "W"

因为:

ord("a") ^ ord("6") == 87

chr(87) == "W"
链接地址: http://www.djcxy.com/p/1773.html

上一篇: How does the bitwise operator XOR ('^') work?

下一篇: What does $k => $v in foreach($ex as $k=>$v) mean?