题目
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例
- 示例 1:
输入: 1
输出: true
解释: 20 = 1 - 示例 2:
输入: 16
输出: true
解释: 24 = 16 - 示例 3:
输入: 218
输出: false
C++代码
位逻辑运算符的妙用!
若一个数为2的幂,则其二进制只有1个1(2^i)。
n&(n-1),n-1有点类似于将n的二进制退位(类似于加法中的进位的概念),所以n-1的二进制中,对应于n的二进制首位的位置上为0,接下来就可以用&运算符了,若n为2的幂,那么n-1的二进制全为1,则n&(n-1)==0。
注意,2的幂大于等于1!所以要先判断n的大小。
class Solution {
public:
bool isPowerOfTwo(int n)
{
if(n<=0) return false;
if((n&(n-1))==0) return true;
else return false;
}
};