当我看到以下代码的输出时,感到有点困惑:
$x = "a";
$y = "b";
$x ^= $y;
$y ^= $x;
$x ^= $y;
echo $x; //Got b
echo $y; //Got a
这里运算符^
是如何工作的?
当我看到以下代码的输出时,感到有点困惑:
$x = "a";
$y = "b";
$x ^= $y;
$y ^= $x;
$x ^= $y;
echo $x; //Got b
echo $y; //Got a
这里运算符^
是如何工作的?
^ 是“异或”(exclusive or) 位运算符。它的英文读音为“either or”。当且仅当两个二进制位不同时,结果为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"
^
运算符是一个位运算符,意味着它作用于操作数的每一位。
返回一个值,其中每个位如果操作数中对应的位不相等则为1
,如果相等则为0
。
例如:
100110110 ^ 010001100 = 110111010
^ 运算符对每个变量的位值执行异或操作。异或执行以下操作:
a = 1100
b = 1010
xor = 0110
x是异或操作的结果。如果位相等,则结果为0,如果不同,则结果为1。
在您的示例中,^=执行异或和赋值,并在两个变量$x和$y之间交换位。
XOR
或者异或是基于逻辑和电路的。它表示,例如,A ^= B
其中 A 是 0111,B 是 0101,在每个对应的位上可以是 1 或 0,但不能同时为两者。因此
A = 0111
B = 0101
_____
^= 0010