题目
一个int整数二进制中1的个数
思路1
1左移31次,按位与32次,结果分为零和非零两种情况;
思路2
把一个整数减去1后再和原来的整数做位与运算,可以将最右边为1的那一位变成0,左边为1的位不变,循环到结果为0时终止,可以不计算32次。
100 011&100=0 1
110 101&110=100 011&100=0 2
代码
static int numsofBitone(int n){
int count = 0;
while(n!=0){
count++;
n = (n-1)&n;
}
return count;
}