首先第一种方法,先判断n&1是否为零,再将n无符号右移一位。
代码如下:
int n=-1;
int count=0;
while(n!=0) {
if((n&1)!=0){
count++;
}
n>>>=1;
}
System.out.println(count);
结果如下:
第二种,通过for循环32次来计算该数中二进制中一的个数,方法同上但不需要用无符号右移。缺点是无论是什么数都要判断32次。
代码如下:
int n=-1;
int count=0;
for(int i=0;i<32;i++){
if(((n>>i)&1)!=0){
count++;
}
}
System.out.println(count);
结果如下:
第三种方法,通过先判断n是否为零,再将n&(n-1),来计算其二进制中一的个数。
代码如下:
int n=-1;
int count=0;
while(n!=0){
n=n&(n-1);
count++;
}
System.out.println(count);