异或,英文为 Exclusive OR,通常缩写为 XOR。它是一种逻辑运算,其含义是:
两个输入值相同时,输出为“假”;两个输入值不同时,输出为“真”。
简单记就是:“不同为1,相同为0”(在正逻辑中,1代表真,0代表假)。
异或的标准运算符是 ⊕(一个带圈的加号)。有时在编程中也用脱字符 ^ 表示。
它的行为完全由下面的真值表定义:
| 输入 A | 输入 B | 输出 A ⊕ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
从这个表可以清晰地看出:
A 和 B 都是0或都是1(相同)时,结果为 0。
A 和 B 一个是0,一个是1(不同)时,结果为 1。
异或操作可以通过基本的与、或、非操作组合而成:
A ⊕ B = (A ∧ ?B) ∨ (?A ∧ B)
中文解释:A异或B,等价于 (A为真且B为假) 或者 (A为假且B为真)。这完美地诠释了“二者只能居其一”的排他性含义。
异或操作有一些非常独特且有用的数学特性:
交换律: A ⊕ B = B ⊕ A
操作数的顺序不影响结果。
结合律: A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C
多个异或操作,先算哪一部分不影响终结果。
恒等律: A ⊕ 0 = A
任何值与0异或,都等于它本身。0是异或操作的单位元。
自反律: A ⊕ A = 0
任何值与自身异或,结果总是0。
自逆性: A ⊕ B ⊕ B = A
这是异或强大、有用的特性!对一个值A连续异或同一个值B两次,会得到A本身。
推导:A ⊕ B ⊕ B = A ⊕ (B ⊕ B) = A ⊕ 0 = A
基于上述特性,异或在多个领域有广泛应用:
加密与解密:
利用自逆性 (A ⊕ B ⊕ B = A) 可以实现简单的对称加密。
加密:明文 ⊕ 密钥 = 密文
解密:密文 ⊕ 密钥 = 明文
很多流密码(如RC4)的就是异或操作。
交换两个变量的值(不使用临时变量):
这是一个经典的编程技巧:
a = a ^ b b = a ^ b # 此时 b = (a ^ b) ^ b = a a = a ^ b # 此时 a = (a ^ b) ^ a = b
数据校验与奇偶校验:
将一串数据的所有位进行异或,结果可以作为一個简单的校验值。如果传输过程中有单个比特发生错误,这个校验值就会改变,从而发现错误。
底层电路设计:
异或是构成加法器(特别是半加器)的组件。CPU中的算术逻辑单元(ALU)大量使用异或门。
半加器的“和”输出就是 A ⊕ B。
模2加法:
在伽罗瓦域(GF(2))中,异或运算等价于模2加法(不进位的加法)。这使得它在纠错码(如RAID)和线性代数中非常有用。
RAID 5:
磁盘阵列RAID 5使用异或来计算奇偶校验信息。如果一块磁盘失效,可以通过剩余数据盘和奇偶校验盘进行异或运算来恢复丢失的数据。
你可以这样形象地理解异或:
开关:想象两个开关控制一盏灯。只有当一个开关扳上去,另一个扳下来(状态不同)时,灯才亮。两个都扳上去或都扳下来(状态相同),灯都不亮。这就是异或。
找不同:它的工作就是找出两个输入是否不同。
| 特性 | 描述 | 公式 |
|---|---|---|
| 定义 | 不同为1,相同为0 | A ⊕ B |
| 单位元 | 0 | A ⊕ 0 = A |
| 自反性 | 自己与自己运算得0 | A ⊕ A = 0 |
| 应用 | 加密、交换变量、数据校验、加法器 | - |
异或操作因其简洁的定义和强大的数学特性,成为了数字世界中基础、重要的运算之一。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。