231. 2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
检测是否为 2 的幂:
我们通过 x & (-x) 保留了最右边的 1,并将其他位设置为 0 若 x 为 2 的幂,则它的二进制表示中只包含一个 1,则有 x & (-x) = x。
若 x 不是 2 的幂,则在二进制表示中存在其他 1,因此 x & (-x) != x。
因此判断是否为 2 的幂的关键是:判断 x & (-x) == x。
代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n == 0) return false;
long x = n;
return (x & (x - 1)) == 0;
}
};