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

2022-08-30 17:05:33

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

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

操作员如何在这里工作?^


答案 1

^ 是“独占或”按位运算符。它在英语中读作“要么或”。当且仅当两个位不同时,结果为 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”视为它们的整数等价物。


答案 2

这看起来像使用 XOR 交换值。虽然我不确定PHP中的字符串(通常你用它来表示int或其他东西)。有关XOR的真值表,您可以查看此处

有趣的是,它是可逆的:A XOR B XOR B == A ...与 或 不起作用。因此,可以像示例中那样使用它来交换两个值:XORANDOR

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

方法:

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

推荐