异或运算符(^
)是一种位运算符,其核心逻辑为“相同为 0,不同为 1”。在 JavaScript 中,它广泛应用于数值计算、数据加密、算法优化等领域。
定义与规则
核心规则为:相同为0,不同为1。具体表现为:
- 二进制位比较:
-
- 若两个操作数的对应位相同,结果为0;不同则为1。
- 示例:
5 ^ 3
(二进制0101 ^ 0011
)结果为0110
(十进制6)。
- 真值表:
输入A | 输入B | 输出A ^ B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
核心特性
- 交换律:
a ^ b = b ^ a
- 结合律:
(a ^ b) ^ c = a ^ (b ^ c)
- 自反性:
a ^ b ^ a = b
(两次异或同一值可还原原值)。 - 恒等律:
a ^ 0 = a
,任何数与0异或结果不变。 - 归零律:
a ^ a = 0
,相同数异或结果为0。
JavaScript 中的异或运算
交换变量值
无需临时变量,通过三次异或操作交换两个整数:
let a = 5, b = 10;
a = a ^ b; // a = 15 (二进制 1111)
b = a ^ b; // b = 5 (1111 ^ 1010 = 0101)
a = a ^ b; // a = 10 (1111 ^ 0101 = 1010)
注意:若交换同一变量(如数组索引重复),结果会归零。
检测奇偶性
利用二进制最低位判断奇偶:
function isOdd(num) {
return (num ^ 1) !== 0; // 奇数返回true,偶数返回false
}
原理:奇数二进制末位为1,与1异或结果为0则偶数,否则奇数。
查找唯一出现奇数次数的元素
在数组中,若某元素仅出现奇数次,其他均出现偶数次,可通过异或快速定位:
function findSingle(arr) {
return arr.reduce((acc, num) => acc ^ num, 0);
}
// 示例:findSingle([4, 1, 2, 2, 3, 1, 4]) 返回3
原理:偶数次出现的元素异或后相互抵消,最终保留奇数次元素。
简单数据加密与解密
通过异或同一密钥实现对称加密:
function xorEncrypt(str, key) {
return str.split('').map(c => c.charCodeAt(0) ^ key).join(',');
}
function xorDecrypt(encrypted, key) {
return encrypted.split(',').map(n => String.fromCharCode(n ^ key)).join('');
}
// 示例:xorEncrypt('Hello', 123) -> "加密结果"; xorDecrypt(加密结果, 123) -> "Hello"
特点:加密解密使用相同密钥,但安全性较低,需结合其他算法增强。