位运算&的使用

138 阅读1分钟

判断偶数

偶数的二进制末位一定是0,奇数是1,如4(10),5(101),二进制补齐位数后,运算方式:1&1=1 1&0=0,所以只需要按位&1就可以判断是否是偶数

const isEven = (num)=>{
  if(typeof num !=="number") return;
  return num>0&&(num&1)==0
}
console.log(isEven(2)); // true
console.log(isEven(3)); // false

判断一个数n是否为2的幂

如果是2的幂,高位一定有1,低位全是0(8421码),而n-1补位后高位为0,其他位都是1,因此可以判断:

const isPowerToTow = (n)=>{
  if (typeof n !=='number') return
  return n>0&&((n&(n-1))===0)
}
console.log(isPowerToTow(4)); // true
console.log(isPowerToTow(3)); // false

二进制中1的个数

相邻的两个数,二进制只相差末尾的1(8421码),根据这个特点,就可以计算二进制中1的个数 image.png

const hammingWeight = (n)=> {
  if (typeof n !=='number') return
  let index = 0;
  while(n){
    ++index
    n =  n & (n-1)
  }
  return index
};