Skip to content
异或运算规则

异或的规则简单来说就是相同为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 的值)

相关门电路异或