1.判断x是否为2的幂次
若x为2的幂次
则x转化为2进制的形式时只有最高位为1,其余为0
x-1与之相反,最高位为0,其余位为1
x与x-1做按位与运算,x&(x-1)=0,则表明x是2的幂次,否则,不是。
例如:
x=5 --> 101
x-1=4 --> 100
101 & 100 = 100 不为0 则x=5不是2的次幂
例如:
x=4 --> 100
x-1=3 --> 011
100 & 011 = 000 为0 则x=4=2^2是2的次幂
2.求一个数转化为二进制数中1的个数
class Solution {
public static void main(String[] args) {
int x = 5;
System.out.println(get1Num(x));
}
public static int get1Num(int x){
int cnt = 0;
while (x!=0){
x = x & (x-1);
cnt++;
}
return cnt;
}
}
// 2
每执行一次x=x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
x=5过程:
x=5(101)
x-1=4(100)
1:5&4 --> 101&100 = 100(=4)
2: 4&3 --> 100&011 = 000(=0)
通过两次比较得出x=5(101)中含1的个数为2