Given an integer, write a function to determine if it is a power of two.
判断一个数是否是2的幂,判断方法主要依据2的N次幂的特点:仅有首位为1,其余各位都为0.
方法1: n & n-1 == 0
1
2
3
4
5
6
|
class
Solution {
public
:
bool isPowerOfTwo(
int
n) {
return
(n>
0
) && (!(n&(n-
1
)));
}
};
|
方法2: 判断n的二进制中1的个数
1
2
3
4
5
6
7
8
9
|
bool isPowerOfTwo(
int
n) {
int
count =
0
;
while
(n >
0
)
{
count+=(n&
0x01
);
n>>=
1
;
}
return
count==
1
;
}
|
直接用n%2,结果如果为1,就返回false(n=1除外,因为2的0次幂为1)。
代码如下:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0) return false;
while(n)
{
if(n%2==1&&n!=1) return false;
n/=2;
}
return true;
}
};