231. 2的幂

99 阅读1分钟

思路

如果一个数是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