如何判断mac地址是否是2的n次方

27 阅读1分钟
function isPowerOfTwo(n){
  //&按位与运算,对于2的幂次方n,他的二进制表示中只有一个1
  return (n & ( n - 1)) == 0
}
function judge(macAddress){
  const nums = macAddress.split(":").map(str => parseInt(str,16));
  const sum = nums.reduce((acc,cur) => acc + cur, 0)
  return isPowerOfTwo(sum)
}
console.log(judge('00:11:22:33:44:55'))
console.log(judge('00:00:00:00:00:02'))

上述函数是判断整个mac地址是不是2的幂次方。(判断的重点是在于通过使用了按位与运算)

function isPowerOfTwoFunc(mac){
  const lastByte = parseInt(mac.sunstr(-2),16);
  return ((lastByte & (lastByte - 1)) === 0) && (lastByte !== 0)
}

这个是在检查mac地址的最后一位是不是2的幂次方。

上面两个的重点都在于使用与运算。