思路一:
可以举一个8位二进制例子,对于二进制,除以一个2,原来的数字将会少一个0,若除的过程中有余,则表示当前位置有一个1.
以10100010为例,
第一次除以2,商为1010001,余0;
第二次除以2,商为101000,余为1;
<span style="font-size:14px;"> private static int count(byte b){
int num=0;
while(b!=0){
if(b%2==1)
num++;
b=(byte) (b/2);
}
return num;
}</span>
思路二:
使用位操作,
向右移位过程中,会把最后移位丢弃,那么如何判断最后一位是0还是1呢,只需要把这个八位数的数字与00000001进行与操作,如果结果为1,则表示最后一位为1.
<span style="font-size:14px;"> private static int count1(byte b){
int num=0;
while(b!=0){
num+=b&0x01;
b>>=1;//右移,高位补0
}
return num;
}
</span>
代码出自编程之美,里面后续还有三种思路~~不写了