思路
如果一个数是2的幂次方,则表示它的二进制码中只有一个1,所以只需要判断它是否只含有一个1即可。但有一个特殊情况:-2147483648的二进制表示(补码)为1000......0000,含有一个1,所以这个情况要单独判断。
class Solution {
public boolean isPowerOfTwo(int n) {
if (n < 0) {
return false;
}
int count = 0;
while (n != 0) {
if ((n & 1) == 1) {//和1做与运算,如果最后一位是1,才会返回1
count++;
}
n = n >>> 1;//右移一位,前面填充0
// n = n >> 1;//这样的话对于负数,前面始终会填充1,死循环。
}
return count == 1;
}
}
000000001010001 &
000000000000001 =
000000000000001