关于异或,"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]的值已经变成了101test[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