首先知道一个知识:一个数n,n=n&(n-1)后,n就会把最右边的1去掉。
就可以写出代码:
#include<stdio.h>
int NumberOf1(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
int main()
{
int n = 0;
scanf("%d", &n);
int l = NumberOf1(n);
printf("%d", l);
return 0;
}
依次去掉某个数的二进制的最右边的1,然后count++,当数为0时循环结束,得到的count就是1 的个数。
可以做出延申,如果是求一个数是不是2^n,就可以用这种方式来判断,如果一个数去掉最右边的1后这个数是0,那么这个数就是2^n。那判断条件就是:
n&(n-1)==0