题目来源
给你一个数字N,求判断它是否是2的次方。比如8是2的3次方,返回true,9不是2的次方,返回false。
思路
这个题目最初想到的是递归除以2。但考虑到2这个数字比较特殊,它的次方在计算机中的位存储也是很特殊的,所以可以试下位操作。
2 : 10
4 : 100
8 : 1000
16: 10000
...
2的X次方,其二进制是1后面跟X个0;而2的X次方减1的二进制都是1.
1 : 1
3 : 11
7 : 111
15: 1111
...
而2^x 和2^x-1 进行位与操作,结果是0.比如8和7
1000
& 0111
-------
0000
那么我们就可以利用这一点来判断一个数是否为2的次方。
实现
JavaScript:
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
if(n<=0){return false}
return (n&n-1)===0
};