Leetcode - Power of Two

Question

Given an integer, write a function to determine if it is a power of two.

Java Code

//版本一:通过整数二进制位中1的个数来判断
public boolean isPowerOfTwo(int n) {
    if((n >>> 31) == 1)//n为负数
        return false;

    //n的二进制最低位是否为1,注意2^0 = 1
    int count = n & 1;
    //统计各个二进制位上1的个数
    while((n >>>= 1) != 0)
        if((n & 1) == 1) ++count;

    //如果所有二进制位上只有一个1,则n是2的幂
    return count == 1;
}

//版本二:直接通过求对数判断
public boolean isPowerOfThree(int n) {
    if(n < 1) return false;
    //必须用10计算换底公式,如果用e换底会有较大的计算精度误差
    double pow = Math.log10(n) / Math.log10(2);
    return pow == (int)pow;
}

你可能感兴趣的:(LeetCode,位运算,power)