Power of Two

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

写一个程序判断给定的整数n是否是2的幂,比如1,2,4,8分别都是2的幂,但6就不是。

转换成二进制来看,如果这个数只有一个1则它一定是2的幂。比如2是10,4是100,8是1000而6是110

普通解法:循环判断是给定数字转换成二进制后是否只有一个1

public boolean isPowOfTwo(int n) {
    if (n < 0) {
        return false;
    }
    boolean once = false;
    while (n > 0) {
        if ((n & 1) == 1) {
            if (once) {
                return false;
            } else {
                once = true;
            }
        }
        n = n >> 1;
    }
    return once;
}

进阶解法:位操作中 n & (n-1) 可以消除最低位上的1,只需判断如下

public boolean isPowOfTwo(int n) {
    if (n <= 0) {
        return false;
    }
    return (n & (n - 1)) == 0;
}