异或运算规则
异或的规则简单来说就是相同为0,不同为1(a)
在常规的编程中,异或运算^
主要用于整数类型的数据,或者布尔类型(两个操作数相同为false,不同为true)
0^0=0;
0^a=a;
a^a=0;
a^b^a=b;
WARNING
上面的不同指的是,一个为0,另一个不为0,如果两个是不同的不为0的数字呢?
两个不相同的数字就是二进制按位异或运算了
异或操作的性质
- 恒等性:任何数与0异或,结果是其本身:例如
n^0=n
- 自反性:任何数与自身异或,结果是0:例如
n^n=0
- 异或操作满足交换律和结合律:即
a^b=b^a,(a^b)^c=a^(b^c)

Preview
根据上述规则,来看一下为什么上面的示例中可以交换变量
假设初始值:
a = A
b = B
第一步:a ^= b(即 a = a ^ b) a 的新值:A ^ B
b 仍为 B
第二步:b ^= a(即 b = b ^ a)
此时 a = A ^ B,代入计算:
b = B ^ (A ^ B)
根据交换律:B ^ B ^ A = 0 ^ A = A
结果:b 被赋值为 A(原 a 的值)
第三步:a ^= b(即 a = a ^ b)
此时:
a = A ^ B(第一步结果)
b = A(第二步结果)
计算:a = (A ^ B) ^ A = B ^ (A ^ A) = B ^ 0 = B
结果:a 被赋值为 B(原 b 的值)