在JavaScript中,二进制运算主要包括位运算符,它们用于对数的二进制表示形式进行操作。这些操作在性能优化、图形处理、数据加密等领域非常有用。下面是一些常见的二进制运算技巧及其解析:
### 1. 位与(AND)运算符 `&`
- **用途**:用于将两个数的二进制表示进行AND操作。每位上只有两个操作数都为1时,结果才为1。
- **技巧**:常用于清零、取偶数等场景。
let a = 5; // 二进制 101
let b = 3; // 二进制 011
let result = a & b; // 结果为 1 (二进制 001),即1
// 技巧示例:清零特定位
let num = 15; // 二进制 1111
num &= ~(1 << 2); // 将第3位清零(从右往左数),结果为7(二进制 0111)
### 2. 位或(OR)运算符 `|`
- **用途**:用于将两个数的二进制表示进行OR操作。每位上只要有一个操作数为1,结果就为1。
- **技巧**:常用于设置特定位、求两个数的并集等场景。
let a = 5; // 二进制 101
let b = 3; // 二进制 011
let result = a | b; // 结果为 7 (二进制 111)
// 技巧示例:设置特定位
let num = 1; // 二进制 0001
num |= (1 << 2); // 将第3位设置为1,结果为5(二进制 0101)
### 3. 位异或(XOR)运算符 `^`
- **用途**:用于将两个数的二进制表示进行XOR操作。每位上两个操作数不同时,结果才为1。
- **技巧**:常用于切换特定位、交换两个数的值等场景(不借助临时变量)。
let a = 5; // 二进制 101
let b = 3; // 二进制 011
let result = a ^ b; // 结果为 6 (二进制 110)
// 技巧示例:切换特定位
let num = 5; // 二进制 101
num ^= (1 << 1); // 切换第2位,结果为7(二进制 111)
// 技巧示例:无临时变量的值交换
let x = 5, y = 10;
x = x ^ y;
y = x ^ y; // y 现在是原来的x
x = x ^ y; // x 现在是原来的y
### 4. 位非(NOT)运算符 `~`
- **用途**:用于对数的二进制表示进行取反操作。每位上的0变成1,1变成0。
- **注意**:结果会转为32位补码形式,因此直接对结果进行操作时需要注意这一点。
### 5. 左移(Left Shift)运算符 `<<`
- **用途**:将数的二进制表示向左移动指定的位数,右侧超出的位被丢弃,左侧边缘超出的部分用0填充。
- **技巧**:常用于快速乘以2的幂次方。
let num = 5; // 二进制 101
let result = num << 2; // 结果为 20 (二进制 10100),相当于乘以2^2
### 6. 右移(Right Shift)运算符 `>>`
- **用途**:将数的二进制表示向右移动指定的位数,左侧超出的位被丢弃,对于正数,右侧边缘超出的部分用0填充;对于负数,这取决于具体的JavaScript引擎实现(通常是符号扩展)。
- **技巧**:常用于快速除以2的幂次方。
let num = 20; // 二进制 10100
let result = num >> 2; // 结果为 5 (二进制 00101),相当于除以2^2
这些技巧能够让你在JavaScript中更有效地处理二进制数据,提高代码的执行效率和可读性。