JavaScript位运算

  1. 位运算的基本类型
  • 一元 ~(按位求补)运算符
  • 二进制 << (左移) 、 >> (右移) 和 >>> (无符号右移)运算符
  • 二进制 &(逻辑 AND)、|(逻辑 OR)和 ^(逻辑异或)运算符
  1. 求数组一半长度,遇到奇数则舍去小数
    halfLen = a.length >> 1; 5>>1//2
    不过需要注意右移运算符>>优先级别加号+还低。 因此在于其他操作符号想结合时候可以适当增加括号,例如求中位
    mid = left + (right - left >> 1);
    mid = left + ~~((right - left) / 2);
    不建议使用mid = (left + right)>>1;,因为加号操作可能造成溢出

  2. 舍弃小数,保留整数位
    halfLen = ~~(a.length / 2);
    halfLen = a.length / 2 | 0;

  3. 判断奇偶
    evenNum & 1 === 0; // 偶数
    oddNum & 1 === 1; // 奇数

  4. 善用异或(相同为0,不同为1)
    5 ^ 5; // 0
    5 ^ 5 ^ 6 ^ 6 ^ 7; // 7

  5. 判断数是否是2的幂次方(注意0也会被判为true)
    num & (num - 1) === 0;



  6. 翻转数的第K位
    num ^= 1 << k;

  7. 将第K位设为0
    num &= ~(1 << k);

  8. 将第K位设为1
    num |= 1 << K;

  9. 判断第K位是否为0
    num & 1 << k === 0;

你可能感兴趣的:(JavaScript位运算)