2的幂
题目
判断一个数字是否为 2 的 n 次幂.
题解
Tips
使用 n & (n - 1)
如果一个数是 2 的指数, 那么它的二进制有且仅有一个 1.
2 ^ 0 = 1 = 0b0001
2 ^ 1 = 2 = 0b0010
2 ^ 2 = 4 = 0b0100
因此通过使用 n & (n - 1), 把这个 1 去掉, 剩下的如果等于 0, 就证明是 2 的指数. 关于使用 n & (n - 1), 这里不再赘述, 可访问 位运算的一些技巧.
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function (n) {
if (n <= 0) return false
return (n & (n - 1)) === 0
}
使用数学方法
通过数学计算, 不管是 2 的幂, 3 的幂还是 4 的幂, 都可以用以下方案解决.
var isPowerOfTwo = function (n) {
return (Math.log10(n) / Math.log10(2)) % 1 === 0
}