1. 简介

本文我们将学习 异或(XOR)运算,也称为 异或操作
XOR 在多个领域中都有广泛应用,例如:加密算法、遗传算法、数字信号处理、错误校验机制等。

2. 位运算概述

XOR 是一种 位运算(bitwise operation)
位运算直接对整数在内存中的二进制位进行操作,通常比普通算术运算更快,因为它们只在单个 CPU 寄存器中完成,不需要多个寄存器之间的数据搬运。

位运算分为两类:

  • 一元运算(Unary):如 ~(按位取反)
  • 二元运算(Binary):如 &(与)、|(或)、^(异或)

举个例子:

int a = 5;  // 二进制:0101
int b = 3;  // 二进制:0011

int and = a & b;  // 0001 → 1
int or  = a | b;  // 0111 → 7

3. 异或运算详解

异或运算用符号 ^ 表示,它接受两个操作数,规则如下:

  • ✅ 如果两个位相同,结果为 0
  • ✅ 如果两个位不同,结果为 1

真值表

x₁ x₂ XOR(x₁, x₂)
0 0 0
0 1 1
1 0 1
1 1 0

3.1 硬件实现

XOR 在硬件层面通常由多个逻辑门组合实现:

  • ✅ 2 个与门(AND)
  • ✅ 2 个非门(NOT)
  • ✅ 1 个或门(OR)

如下图所示:

XOR SCEHMATICS

通过这种组合,可以实现对两个输入位的异或判断。
这种设计正好对应 XOR 的真值表中两个为 1 的情况:

  • x₁=1, x₂=0
  • x₁=0, x₂=1

4. XOR 在加密中的应用

XOR 在加密算法中非常有用,特别是在 对称加密 中。

4.1 加密流程

XOR 可用于双向加密算法,发送方和接收方共享一个相同的密钥:

  • ✅ 发送方使用密钥和明文进行 XOR 得到密文
  • ✅ 接收方使用相同密钥和密文进行 XOR 恢复明文

如下图所示:

Two Way Encryption Using XOR

4.2 示例演示

假设密钥 C = 11001001,明文 P = 11100101

加密过程如下:

C:   1 1 0 0 1 0 0 1
P:   1 1 1 0 0 1 0 1
----------------------
ENC: 0 0 1 0 1 1 0 0

解密过程如下:

ENC: 0 0 1 0 1 1 0 0
C:   1 1 0 0 1 0 0 1
----------------------
P:   1 1 1 0 0 1 0 1

✅ 可见,两次异或操作后恢复原始明文。

4.3 XOR 在加密中的优势

1️⃣ 不泄露信息

XOR 的结果不能直接反推出输入值,例如:

  • ✅ XOR(x1, x2) = 1 → (x1=1, x2=0) 或 (x1=0, x2=1)
  • ✅ XOR(x1, x2) = 0 → (x1=1, x2=1) 或 (x1=0, x2=0)

而 AND 和 OR 则会泄露信息:

  • AND(x1, x2) = 1 → x1=x2=1
  • OR(x1, x2) = 0 → x1=x2=0

2️⃣ 可逆性(Involution)

XOR 是一个 自反函数(involutory function)

XOR(C, XOR(C, P)) = P

这意味着只要使用相同的密钥再做一次异或操作,就能还原原始数据。

5. XOR 的其他用途

除了加密,XOR 还有很多实用场景。

5.1 交换两个变量(不使用临时变量)

传统方式:

int tmp = a;
a = b;
b = tmp;

使用 XOR:

a = a ^ b;
b = b ^ a;
a = a ^ b;

示例:

初始值:a = 6 (0110)b = 10 (1010)

  1. a = a ^ b → 1100
  2. b = b ^ a → 0110(恢复 a 原值)
  3. a = a ^ b → 1010(恢复 b 原值)

最终:a = 10, b = 6

5.2 校验与容错

XOR 可用于生成 奇偶校验位(Parity Bit),在 RAID 存储系统中实现数据冗余和恢复。

6. 总结

  • ✅ XOR 是一种基础但非常强大的位运算
  • ✅ 在加密、数据交换、校验等领域有广泛应用
  • ✅ XOR 不泄露原始数据信息,具有可逆性
  • ✅ 执行效率高,适合底层优化和性能敏感场景

如果你在编写底层代码、加密算法或优化性能时遇到需要位操作的场景,XOR 很可能是一个值得优先考虑的工具。


原始标题:The XOR Operation