概念
异或(XOR)运算是计算机中常用的位运算之一,符号为 ^,其定义如下:
- 相同为0,不同为1:对于两个二进制位,如果相同则结果为0,如果不同则结果为1。
性质
- 交换律:A ^ B = B ^ A
 异或运算满足交换律,即交换两个操作数的位置不会改变结果。
- 结合律:(A ^ B) ^ C = A ^ (B ^ C)
 异或运算满足结合律,即不管如何分组,结果是相同的。
- 自反性:A ^ A = 0
 对同一个数进行异或操作,结果为0。
- 零律:A ^ 0 = A
 任何数与0异或,结果仍为该数。
- 对称律:A ^ B = B ^ A
 和交换律相同。
- 相等律:A ^ A = 0
 对同一个数进行异或操作,结果为0。
应用
-  交换两个变量的值:通过异或运算可以在不使用临时变量的情况下交换两个数的值。 
-  检验两个数是否相等:如果两个数的异或结果为0,则说明它们相等。 
-  构建校验和:比如CRC校验、哈希计算中常用异或。 
-  加密算法:异或在一些简单的加密算法(如流密码)中也有广泛应用。 
示例
交换两个变量的值
#include <iostream>
using namespace std;int main() {int a = 5, b = 10;// 打印交换前的值cout << "Before swap: a = " << a << ", b = " << b << endl;// 使用异或交换 a 和 ba = a ^ b;  // a变成 a ^ bb = a ^ b;  // b变成 (a ^ b) ^ b = aa = a ^ b;  // a变成 (a ^ b) ^ a = b// 打印交换后的值cout << "After swap: a = " << a << ", b = " << b << endl;return 0;
}
检验两个数是否相等
#include <iostream>
using namespace std;int main() {int x = 15, y = 15;if ((x ^ y) == 0) {cout << "x and y are equal." << endl;} else {cout << "x and y are not equal." << endl;}return 0;
}
统计一个数二进制中1的个数(Hamming Weight)
#include <iostream>
using namespace std;int countSetBits(int n) {int count = 0;while (n) {count += (n & 1);  // 检查最低位是否为1n >>= 1;  // 右移一位}return count;
}int main() {int n = 29;  // 二进制表示为 11101cout << "The number of 1s in " << n << " is: " << countSetBits(n) << endl;return 0;
}
使用异或运算构建一个简单的加密解密
#include <iostream>
using namespace std;char xorEncryptDecrypt(char ch, char key) {return ch ^ key;  // 异或加密/解密
}int main() {char key = 'K';  // 加密密钥char message = 'H';  // 明文char encrypted = xorEncryptDecrypt(message, key);cout << "Encrypted: " << encrypted << endl;// 解密char decrypted = xorEncryptDecrypt(encrypted, key);cout << "Decrypted: " << decrypted << endl;return 0;
}