js位运算

2023-12-29 14:37:21

  1. 按位与(&)

    • 描述:对两个相应的二进制位执行 AND 操作。只有两个对应的位都是1时,结果位才是1。
    • 示例:
      let result = 5 & 3; 
      // 0101 & 0011 = 0001 (1)
  2. 按位或(|)

    • 描述:对两个相应的二进制位执行 OR 操作。只要两个对应的位中有一个是1,结果位就是1。
    • 示例:
      let result = 5 | 3; 
      // 0101 | 0011 = 0111 (7)
  3. 按位异或(^)

    • 描述:对两个相应的二进制位执行异或操作。当两个对应的位不相同时,结果位为1。
    • 示例:
      let result = 5 ^ 3; 
      // 0101 ^ 0011 = 0110 (6)
  4. 按位非(~)

    • 描述:对一个二进制数的每个位执行取反操作,即0变为1,1变为0。
    • 示例:
      let result = ~5; 
      // ~0101 = 1010 (-6 in decimal)
  5. 左移(<<)

    • 描述:将一个数的所有位向左移动指定的位数,右侧用0填充。
    • 示例:
      let result = 5 << 1; 
      // 0101 << 1 = 1010 (10)
  6. 右移(>>)

    • 描述:将一个数的所有位向右移动指定的位数,左侧用原来的最高位填充(有符号右移)。
    • 示例:
      let result = 5 >> 1; 
      // 0101 >> 1 = 0010 (2)
  7. 无符号右移(>>>)

    • 描述:将一个数的所有位向右移动指定的位数,左侧用0填充(无符号右移)。
    • 示例:
      let result = -5 >>> 1; 
      // 1111111111111111111111111111111011 >>> 1 = 0111111111111111111111111111111101 (2147483645)

这些位运算符在特定的情况下很有用,例如优化一些算法或处理特殊的位级数据。然而,它们通常在普通的业务逻辑中用得较少。

1. 加法:

function add(a, b) {
    while (b !== 0) {
        let carry = a & b;
        a = a ^ b;
        b = carry << 1;
    }
    return a;
}

// 示例
let sum = add(5, 3);
console.log(sum); // 输出 8

这里使用了位运算中的异或(^)和与(&)操作来模拟加法过程。循环执行,直到进位为0。

2. 减法:

function subtract(a, b) {
    // 取b的补码并加1
    b = add(~b, 1);
    return add(a, b);
}

// 示例
let difference = subtract(5, 3);
console.log(difference); // 输出 2

在减法中,我们首先取b的补码(使用取反和加1的方式),然后将它与a相加

文章来源:https://blog.csdn.net/m0_47999208/article/details/135288557
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。