好的,阿杰,我给你整理一个 异或(XOR)运算的性质及应用,涵盖数学性质、计算机应用和密码学应用,方便理解和使用。
❌ 异或(XOR)的性质及运用
1️⃣ 异或运算定义
- 符号:
⊕
或^
(编程中常用^
) - 定义:
A | B | A ⊕ B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
- 含义:当两个二进制位不同时,结果为 1;相同时为 0
2️⃣ 异或运算性质
- 交换律:A⊕B=B⊕A
- 结合律:(A⊕B)⊕C=A⊕(B⊕C)
- 自反性:A⊕A=0
- 零元:A⊕0=A
- 求逆性:(A⊕B)⊕B=A
- 多位二进制串按位异或:
- 对应位分别异或
- 常用于校验、加密
3️⃣ 异或的应用场景
1️⃣ 数据交换/加密
- 简单加密:
密文 = 明文 ⊕ 密钥 明文 = 密文 ⊕ 密钥
- 原理:利用异或的可逆性,解密和加密操作相同
2️⃣ 校验与纠错
- 奇偶校验:
- 异或可用于计算一组二进制数的奇偶校验位
- 多位数据的 XOR = 0 → 数据完整
- CRC 和 RAID 校验:
- RAID-5 存储中,通过异或实现冗余校验
- 例如:
P = A ⊕ B ⊕ C
,损坏任意一块可用其他块恢复
3️⃣ 算法技巧
- 交换两个变量而不使用临时变量:
a = a ^ b; b = a ^ b; a = a ^ b;
- 查找数组中唯一出现的元素:
- 给定一个数组,其他数字出现两次,异或所有元素即可得到唯一出现的数字
int res = 0; for (int i=0;i<n;i++) res ^= arr[i];
- 位运算分支判断:
- 异或常用于判断奇偶性或切换状态位
4️⃣ 示例
1️⃣ 数据加密示例(Python)
def xor_encrypt_decrypt(text, key):
return ''.join([chr(ord(c) ^ key) for c in text])
plaintext = "HELLO"
key = 42
cipher = xor_encrypt_decrypt(plaintext, key)
print("密文:", cipher)
print("解密:", xor_encrypt_decrypt(cipher, key))
2️⃣ 数组找单一元素
arr = [2, 3, 5, 4, 5, 3, 4]
res = 0
for num in arr:
res ^= num
print("唯一元素:", res) # 输出 2
5️⃣ 小结
- 异或运算是一种 高效、可逆的二进制运算
- 常用在:
- 加密/解密
- 数据校验/冗余校验
- 算法技巧(如交换变量、找单数元素)
- 核心优势:简单、快速、易于硬件实现
👌 好的,阿杰,我帮你做一个 异或(XOR)运算可视化示例,用 Python + Matplotlib 实现,功能如下:
- 输入二进制数,实时显示异或运算过程
- 支持 两数异或 和 多数异或(数组元素)
- 可视化显示每位运算结果
- 可演示异或在 唯一元素查找 和 简单加密/解密 场景
🛠️ 异或运算可视化示例(Python)
import numpy as np
import matplotlib.pyplot as plt
def visualize_xor(a, b):
# 转换为二进制字符串
max_len = max(a.bit_length(), b.bit_length())
bin_a = format(a, f'0{max_len}b')
bin_b = format(b, f'0{max_len}b')
# 逐位异或
result = []
for i in range(max_len):
result.append(int(bin_a[i]) ^ int(bin_b[i]))
# 可视化
plt.figure(figsize=(10,2))
plt.title(f"{a} ⊕ {b} = {int(''.join(map(str,result)),2)}")
plt.bar(range(max_len), result, color='skyblue')
plt.xticks(range(max_len), [f"{bin_a[i]}⊕{bin_b[i]}" for i in range(max_len)])
plt.ylim(0,1.5)
plt.show()
# =========================
# 示例 1:两数异或
# =========================
visualize_xor(6, 3) # 二进制 110 ⊕ 011
# =========================
# 示例 2:数组中唯一元素
# =========================
arr = [2,3,5,4,5,3,4]
res = 0
for num in arr:
res ^= num
print("数组:", arr)
print("唯一元素:", res)
visualize_xor(arr[0], arr[1]) # 可视化前两个元素异或示意
✅ 功能说明
- 逐位显示:XOR 每个位的运算情况
- 结果计算:显示十进制结果
- 数组唯一元素演示:可以直观理解 XOR 的算法应用
- 可扩展:可改进为动态动画显示整个数组逐步异或
发表回复