异或(XOR)运算详解
1. 定义与基本概念
异或(XOR,全称“Exclusive OR”)是一种逻辑运算,其规则为:当两个输入值不输出为1;当两个输入值相输出为0。
数学表达式:
[ A \oplus B = (A \land \neg B) \lor (\neg A \land B) ]
(即:A为真且B为假,或A为假且B为真)
2. 运算规则表
| 输入A | 输入B | 输出(A XOR B) |
|-------|-------|-----------------|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
3. 核心特性
- 无进位加法:异或等价于二进制加法(不考虑进位)。
示例:1 XOR 1 = 0
(1+1=10,取个位0)。 - 自反性:
A XOR A = 0
,A XOR 0 = A
。 - 交换律与结合律:
A XOR B = B XOR A
,(A XOR B) XOR C = A XOR (B XOR C)
。
4. 应用场景
-
加密与解密
- 简单加密:明文与密钥异或生成密文,密文再与密钥异或还原明文。
示例:明文1010
,密钥1100
→ 密文0110
;密文0110
XOR 密钥1100
→ 明文1010
。 - 一次性密码本:利用异或的对称性和随机性实现安全通信。
- 简单加密:明文与密钥异或生成密文,密文再与密钥异或还原明文。
-
错误检测与校正
- 奇偶校验:通过异或计算数据位的校验位,检测单比特错误。
示例:数据1101
,校验位为1 XOR 1 XOR 0 XOR 1 = 1
,附加后传输11011
。
- 奇偶校验:通过异或计算数据位的校验位,检测单比特错误。
-
数据交换(无临时变量)
- 利用异或交换两个变量的值:
a = 5 # 二进制 0101 b = 3 # 二进制 0011 a = a ^ b # a = 0110 (6) b = a ^ b # b = 0101 (5) a = a ^ b # a = 0011 (3)
- 利用异或交换两个变量的值:
-
位掩码操作
- 翻转特定位:通过异或1翻转目标位。
示例:1010 XOR 0010 = 1000
(翻转第二位)。 - 清除特定位:通过异或0保留原值。
示例:1010 XOR 0000 = 1010
。
- 翻转特定位:通过异或1翻转目标位。
5. 与其他逻辑运算的对比
| 运算 | 规则 | 示例(A=1, B=0) |
|--------|-------------------------------|------------------|
| AND | 两者均为1时输出1 | 0 |
| OR | 至少一个为1时输出1 | 1 |
| XOR | 两者不同时输出1 | 1 |
| XNOR | 两者相同时输出1(XOR的反) | 0 |
6. 扩展:多比特异或
- 逐位运算:对两个二进制数的每一位分别异或。
示例:1101 XOR 1011 = 0110
。 - 用途:哈希函数、伪随机数生成等。
7. 编程实现示例(Python)
```python
单比特异或
print(1 ^ 0) # 输出 1
多比特异或
a = 0b1101 # 十进制 13
b = 0b1011 # 十进制 11
print(bin(a ^ b)) # 输出 0b110 (十进制 6)
加密解密示例
plaintext = 0b1010 # 明文
key = 0b1100 # 密钥
ciphertext = plaintext ^ key # 加密
print(bin(ciphertext)) # 输出 0b110
decrypted = ciphertext ^ key # 解密
print(bin(decrypted)) # 输出 0b1010
```
8. 注意事项
- 不可逆性:单独异或结果无法还原原始数据(需密钥)。
- 安全性:简单异或加密易被破解,需结合其他方法(如AES)。
异或运算以其独特的“异则真”特性,在加密、数据交换、错误检测等领域广泛应用。理解其核心规则与特性,可帮助解决许多底层逻辑问题。