题目描述
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例
示例 1:
输入: 1 输出: true 解释: 2(0) = 1示例 2:
输入: 16 输出: true 解释: 2(4) = 16
思路1
首先小于1的数不符合要求。
然后2的幂,如2(0) = 1 = 1(二进制),2(1) = 2 = 10(二进制),2(2) = 4 = 100(二进制)....发现符合要求的数的二进制数1的个数均为1。
代码
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n < 1) return false;
return hammingWeight(n) == 1 ? true : false;
}
int hammingWeight(int n){
int count = 0;
while (n){
if (n & 0x1 == 1) count++;
n = n >> 1;
}
return count;
}
};
思路2
判断二进制中1的个数是否只有1个还有另外一种求法:n&(n-1) == 0。
注意,==运算符的优先级高于位运算优先级