逻辑异或(XOR)是基于“相同为0、不同为1”和“两次异或抵消”的零成本实用操作,适用于变量交换、单字节加密、布尔翻转、奇偶校验及找唯一数等场景。

逻辑异或(XOR)不是炫技工具,而是有明确数学基础、可预测、零成本的实用操作。它不依赖额外内存,也不需要复杂库,只要理解“相同为0、不同为1”和“两次异或抵消”的核心特性,就能直接落地变量对换与轻量加密。
用异或安全交换两个整数变量
传统交换需临时变量,而异或利用 a ^ a = 0 和 a ^ 0 = a 的性质,三步完成互换:
- 第一步:a = a ^ b → 此时 a 存的是原始 a 与 b 的异或结果
- 第二步:b = b ^ a → 注意此时 a 已更新,这步实际是 b ^ (a ^ b) = a
- 第三步:a = a ^ b → 当前 a 是 a^b,b 是原始 a,所以 (a^b) ^ a = b
注意前提:两变量不能指向同一内存地址(如 a 和 b 是同一个数组元素或同一引用),否则第一步 a ^= a 后变为 0,后续全错。适用于独立整型变量或数组中不同下标位置。
用单字节密钥对字符串做可逆加密
异或加密本质是对称且自反的:明文 ⊕ 密钥 = 密文,密文 ⊕ 密钥 = 明文。只需遍历每个字符,将其 ASCII 值与密钥值异或即可:
- 密钥可以是任意整数(常用 0–255 范围,避免超出行编码范围)
- 加密时:ciphertext[i] = (char)(plaintext[i] ^ key)
- 解密时:再执行一遍相同操作,无需区分加/解密函数
- 示例:'A'(65) ^ 10 → 75('K');75 ^ 10 → 65('A')
这种加密无计算开销,适合配置文件混淆、日志脱敏、教学演示等低敏感场景,但不可用于真实密码或传输密文——它不具备抗频率分析能力,密钥一旦泄露,全部明文瞬间还原。
拓展:用异或做布尔状态切换与奇偶校验
异或的简洁性在状态管理和数据完整性验证中同样高效:
- 开关翻转:flag = flag ^ 1,无论 flag 原值是 0 还是 1,执行后必取反
- 奇偶校验:将一串字节连续异或(如 byte0 ^ byte1 ^ byte2 …),结果为 0 表示偶数个 1,非 0 表示奇数个;接收方重算并比对,可快速发现单比特错误
- 找唯一出现的数:若数组中除一个数外其余均出现两次,全部异或一遍,成对项抵消为 0,结果即为那个唯一数(如 [2,3,2] → 2^3^2 = 3)
这些不是边缘技巧,而是嵌入式开发、协议解析、算法题中的高频实践模式。

















