题目描述
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 2^0 = 1
解题思路1:
若为2幂次方,则二进制只有一位为1,其余都为0;在计算机中负数以补码形式存在。
所以:n & -n == n时,n只有一位为1;
例如:8(00001000), -8(11111000), 00001000&11111000 = 00001000(8);
代码1:
class Solution {
public:
bool isPowerOfTwo(int n) {
return (n>0) && (n & -n) == n;
}
};
解题思路2:
int能表示的最大2的幂次方数对n取余,为0返回true;
代码2:
class Solution {
public:
bool isPowerOfTwo(int n) {
int a = 1;
a<<=30;
if(n<=0 || a%n)
return false;
return true;
}
};
网友评论