给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例 1:
输入:n = 1
输出:true
解释:20 = 1
示例 2:
输入:n = 16
输出:true
解释:24 = 16
示例 3:
输入:n = 3
输出:false
【思路】:循环的方法就不说了,这里主要提一提位运算的思路。
1、如果某个数为负数,那么肯定不是2的幂。
2、如果一个数要想为2的幂,必然有 (n & n-1) == 0
举个例子,8 & 7 == 0
1000
&0111
-----
0000
这是因为2的幂的数,它减一之后必然所有位(除最高位外)都是1.
【代码】:
代码可以一行搞定了。
var isPowerOfTwo = function(n) {
//注:==优先级大于&,所以要括号
return (n > 0 && (n & n-1) == 0)
};