JS异或运算

在编程中,异或操作是一种常见的位操作,用于比较两个数的二进制位并返回新的结果。在JavaScript中,异或操作符为^,用于比较两个数字的二进制位并返回结果。
什么是异或操作
异或操作是一种逻辑运算,当两个操作数的对应位不相同时返回1,相同时返回0。具体规则如下:
- 0 XOR 0 = 0
- 0 XOR 1 = 1
- 1 XOR 0 = 1
- 1 XOR 1 = 0
异或操作常用在加密算法、校验码计算、数据交换等领域。
异或操作符 ^
在JavaScript中,^是异或操作符,用来比较两个数的每一位并返回结果。例如:
let a = 5; // 二进制为 101
let b = 3; // 二进制为 011
console.log(a ^ b); // 输出 6,二进制为 110
位运算符与异或操作
除了异或操作符^,JavaScript还提供了其他位运算符,可以与异或操作结合使用。
按位与 &
按位与操作符&用于将两个数的二进制位进行比较并返回新的结果,规则如下:
- 0 AND 0 = 0
- 0 AND 1 = 0
- 1 AND 0 = 0
- 1 AND 1 = 1
let a = 5; // 二进制为 101
let b = 3; // 二进制为 011
console.log(a & b); // 输出 1,二进制为 001
按位或 |
按位或操作符|用于将两个数的二进制位进行比较并返回新的结果,规则如下:
- 0 OR 0 = 0
- 0 OR 1 = 1
- 1 OR 0 = 1
- 1 OR 1 = 1
let a = 5; // 二进制为 101
let b = 3; // 二进制为 011
console.log(a | b); // 输出 7,二进制为 111
按位取反 ~
按位取反操作符~用于将一个数的二进制位取反并返回新的结果,规则如下:
- NOT 0 = 1
- NOT 1 = 0
let a = 5; // 二进制为 101
console.log(~a); // 输出 -6,二进制为 11111111111111111111111111111010
左移 << 和 右移 >>
左移操作符<<和右移操作符>>用于将一个数的二进制位进行左移或右移操作,并返回结果。左移操作符将二进制位向左移动指定位数,右移操作符将二进制位向右移动指定位数。
let a = 5; // 二进制为 101
console.log(a << 1); // 输出 10,二进制为 1010
console.log(a >> 1); // 输出 2,二进制为 10
异或操作的应用
交换两个数的值
异或操作可以很方便地交换两个数的值,如下所示:
let a = 5;
let b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log(a, b); // 输出 3 5
判断奇偶性
使用异或操作可以判断一个数的奇偶性。如果一个数是奇数,则其二进制表示的最后一位一定是1,异或任何数结果都会改变最后一位。示例代码如下:
function isOdd(num) {
return (num & 1) === 1;
}
console.log(isOdd(3)); // 输出 true
console.log(isOdd(4)); // 输出 false
数组中找出只出现一次的数
给定一个整数数组,除了一个元素只出现一次之外,其余每个元素均出现两次。找出那个只出现一次的元素。
function findSingleNumber(nums) {
let result = 0;
for (let num of nums) {
result ^= num;
}
return result;
}
console.log(findSingleNumber([4, 1, 2, 1, 2])); // 输出 4
总结
异或操作是一种强大而常见的位运算,可以用于多种场景,包括交换两个数的值、判断奇偶性以及在数组中找出只出现一次的数等。在适当的场景下,合理使用位运算可以提高代码的效率和可读性。
极客笔记