《JavaScript算法》位运算

38 阅读2分钟

位运算是在计算机底层非常常用的一种操作。在算法中,位运算常常用于快速计算,尤其是那些与二进制操作相关的问题。下面是一些常见的位运算操作、代码模板及详细注释:

设置某一位为1

function setBit(num, i) {
    return num | (1 << i);
}

console.log(setBit(5, 2));  // 5的二进制表示为101,设置第2位为1后得到111,即7

清除某一位

function clearBit(num, i) {
    return num & ~(1 << i);
}

console.log(clearBit(7, 2));  // 7的二进制表示为111,将第2位清除后得到011,即3

切换某一位的值

function toggleBit(num, i) {
    return num ^ (1 << i);
}

console.log(toggleBit(5, 1));  // 5的二进制表示为101,切换第1位后得到111,即7

检查某一位是0还是1

function getBit(num, i) {
    return (num & (1 << i)) !== 0;
}

console.log(getBit(5, 1));  // 5的二进制表示为101,第1位是0,所以返回false

常见题型:

  1. 单数出现的数字:给你一个整数数组,除一个数字外其余每个数字均出现两次,找到那个只出现一次的数字。
  2. 不使用算术运算符实现加法:给你两个整数,不使用算术运算符返回它们的和。
  3. 位1的个数:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数。
  4. 翻转位:颠倒给定的32位无符号整数的二进制位。
  5. 2的幂:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

使用位运算可以高效地解决这些问题,通常时间复杂度为O(1)或O(n)。