# 位运算
位运算是一种在计算机中直接操作二进制位的方法,它通常比其他算数运算速度更快。在解决一些特定的问题的时候,位运算可以提供高效的解决方案。下面我们来详细的学习一下位运算的相关操作。
# 基本操作
# 按位与(AND):&
- 两个二进制位都为1时,结果为1,否则位0。
- 示例:
let a = 5; // 0101
let b = 3; // 0011
let c = a & b; // 0001
console.log(c); // 1
# 按位或(OR):|
- 两个二进制位中只要有一个为1,结果就为1,否则为0。
- 示例:
let a = 5; // 0101
let b = 3; // 0011
let c = a | b; // 0111
console.log(c); // 7
# 按位异或(XOR):^
- 两个二进制位不同时,结果为1,否则为0。
- 示例:
let a = 5; // 0101
let b = 3; // 0011
let c = a ^ b; // 0110
console.log(c); // 6
# 按位取反(NOT):~
- 对二进制位进行取反操作,即将0变为1,将1变为0。
- 示例:
let a = 5; // 0101
let b = ~a; // 1010
console.log(b); // -6(在有符号整数中,取反后需要考虑补码表示)
# 左移(Left Shift):<<
- 将二进制位向左移动指定的位数,右边空出的位用0填充。
- 示例:
let a = 5; // 0101
let b = a << 1; // 1010
console.log(b); // 10
# 右移(Right Shift):>>
- 将二进制位向右移动指定的位数,左边空出的位用符号位填充(正数用0填充,负数用1填充)。
- 示例:
let a = 5; // 0101
let b = a >> 1; // 0010
console.log(b); // 2
# 应用场景
# 交换两个变量的值
let a = 5;
let b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log(a, b); // 3, 5
# 判断一个数的奇偶性
// 偶数最低位为0,奇数最低位为1
let num = 5;
if (num & 1) {
console.log('奇数');
} else {
console.log('偶数');
}
# 判断一个数是否是2的幂次方
let num = 8;
if ((num & (num - 1)) === 0) {
console.log('是2的幂次方');
} else {
console.log('不是2的幂次方');
}