好的,阿杰,我给你整理一个 异或(XOR)运算的性质及应用,涵盖数学性质、计算机应用和密码学应用,方便理解和使用。


❌ 异或(XOR)的性质及运用

1️⃣ 异或运算定义

  • 符号: 或 ^(编程中常用 ^
  • 定义:
ABA ⊕ B
000
011
101
110
  • 含义:当两个二进制位不同时,结果为 1;相同时为 0

2️⃣ 异或运算性质

  1. 交换律:A⊕B=B⊕A
  2. 结合律:(A⊕B)⊕C=A⊕(B⊕C)
  3. 自反性:A⊕A=0
  4. 零元:A⊕0=A
  5. 求逆性:(A⊕B)⊕B=A
  6. 多位二进制串按位异或
    • 对应位分别异或
    • 常用于校验、加密

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])  # 可视化前两个元素异或示意


✅ 功能说明

  1. 逐位显示:XOR 每个位的运算情况
  2. 结果计算:显示十进制结果
  3. 数组唯一元素演示:可以直观理解 XOR 的算法应用
  4. 可扩展:可改进为动态动画显示整个数组逐步异或