js位运算

本文介绍了JavaScript中的位运算符如按位与(&),按位或(|),按位异或(^),按位非(~),左移<<,右移>>,无符号右移>>>(用于加法和减法的补码技巧),以及它们在模拟加减法过程中的应用。
摘要由CSDN通过智能技术生成

  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相加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天吃饭的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值