思路
使用n和n-1按位与来实现。
- n-1之后,n中最低为的1变为0
- 按位与,同为1的位置仍然为1,最后一个1的位置变为0。去掉一个1,计数器加1。
- 循环,直到n所有的1都变为0,即n=0时结束循环。此时就可以计算出1的个数。
注:此思路可以用于计算1的个数。
int fun(n)
{
int count=0;
while(n)
{
count++;
n=n&(n-1);
}
return count;
}
例如:输入n=9999,输出为8
9999的二进制为:1001 1001 1001 1001
其中共有8个1。