关于异或,"arr[i] ^= 1"和"arr[i] ^1"有什么区别?
What is the difference between "arr[i] ^= 1" and "arr[i] ^1" about XOR?
当我像下面这样写的时候
int [] test = {4};
int a = test[0]^=1;
int b = test[0]^1;
我可以得到这个输出。
输出
test[0]^=1 : 5 a : 101
test[0]^1 : 4 b : 100
我认为 test[0] = 100 -> test[0]^1 = 101 但事实并非如此。
100
XOR 1
----------
101
你能解释一下有什么不同吗?
因为test[0]^=1
,test[0]的值已经变成了101
。 test[0]^=1
实际上是 test[0] = test[0] ^ 1
。因此,在执行 b = test[0] ^ 1
时,您实际上是在执行 101 ^ 1
,即 100
。所以程序输出是正确的。
int [] test = {4}; // test[0] = 4 = 100
int a = test[0]^=1; // test[0] = 100 ^ 1 = 101 = 5, a = 5 = 101
int b = test[0]^1; // test[0] = 5, b = 101^1 = 100 = 4
当我像下面这样写的时候
int [] test = {4};
int a = test[0]^=1;
int b = test[0]^1;
我可以得到这个输出。
输出
test[0]^=1 : 5 a : 101
test[0]^1 : 4 b : 100
我认为 test[0] = 100 -> test[0]^1 = 101 但事实并非如此。
100
XOR 1
----------
101
你能解释一下有什么不同吗?
因为test[0]^=1
,test[0]的值已经变成了101
。 test[0]^=1
实际上是 test[0] = test[0] ^ 1
。因此,在执行 b = test[0] ^ 1
时,您实际上是在执行 101 ^ 1
,即 100
。所以程序输出是正确的。
int [] test = {4}; // test[0] = 4 = 100
int a = test[0]^=1; // test[0] = 100 ^ 1 = 101 = 5, a = 5 = 101
int b = test[0]^1; // test[0] = 5, b = 101^1 = 100 = 4