从进制的方式考虑,一个数如果为2的幂次方,二进制表现形式肯定为10,100,1000,10000,100000.....等。
那么n-1,二进制数据为01,011,0111,0111,01111...
因此只要让n,n-1两个数按位与‘&’等于零则为2的幂次方
public boolean isPowOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
从进制的方式考虑,一个数如果为2的幂次方,二进制表现形式肯定为10,100,1000,10000,100000.....等。
那么n-1,二进制数据为01,011,0111,0111,01111...
因此只要让n,n-1两个数按位与‘&’等于零则为2的幂次方
public boolean isPowOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}