JS位运算

  • 左移运算符 << 迅速得出2的次方,使用右移运算符 >> 迅速除以2的次方

      2<<2 // 2*2^2=8
      8>>1 // 8/(2^1)=4
    
  • 使用 ^(按位异或)(不同为1,相同为0) 切换变量 0 和 1

      // 三目运算符
      toggle = toggle ? 0 : 1;
      // 异或
      toggle ^= 1;
    
  • 使用&(按位与)判断奇偶性(按位与只有当都为1时才为1)

      // 偶数 & 1 = 0  奇数 & 1 = 1
      8&1 //0
      7&1 //1
    
  • 使用 !! 将数字转为布尔值

      !!-1 //true
      !!0 //false
    
  • 取整

      // ~(按位反)、>>(右移)、<<(左移)、>>>(带符号位右移)、|(按位或) 相当于使用了 Math.floor()
      ~~11.71 //11
      11.71 >> 0 //11
      11.71 << 0 //11
      11.71 | 0 //11
      11.71 >>> 0 //11
    
  • 使用^(按位异或)来完成值交换 (异或:两个数字一样,结果为0;两个数字不一样,结果就是1)

      let a = 7
      let b = 1
      a ^= b
      b ^= a
      a ^= b
    
  • 使用^(按位异或)判断符号是否相同

      (a ^ b) >= 0; // true 相同; false 不相同
    
  • 使用^(按位异或)来检查数字是否不相等

      (a ^ b) === 0; // true 相等; false 不相等
    
  • 加法

    function add(a, b){
      if (a === 0 || b === 0) return a || b
      let num
      while(b !== 0){
        num = a ^ b  // 异或,不看进位的结果
        b = (a & b) << 1    // 与运算,只看进位的结果
        a = num
      }
      return a
    }
    
  • 减法

    function sub(a, b){
      if (a === 0 || b === 0) return a || -b
      b = ~b
      let num
      while (b !== 0){
        num = a ^ b
        b = (a & b) << 1
        a = num
      }
      return a + 1
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值