第一种思路:
使用一个for循环,将32位数依次和 1 进行与运算,假设n=15,n的二进制数为1111(只写了4位), 1111 & 0001 = 0001;若n=14,其二进制数为1110, 1110 & 0001 = 0000,所以只要用if条件判断真假即可使用count记下1的个数。
#include <stdio.h>
int NumberOf1(int n)
{
int count = 0;
int i = 0;
for(i=1;i<=32;i++)
{
//1111 & 0001 = 0001
if (((n >> i) &1) == 1)
count++;
}
return count;
}
int main()
{
//求二进制中 1 的个数
int a = -1;
printf("%d", NumberOf1(a));
return 0;
}
思路二:
使用 n = n & (n-1)
设 n = 15 二进制为 1111
1111 & (1111 - 0001) = 1110;
1110 & (1110 - 0001) = 1100;
1100 & (1100 - 0001) = 1000;
1000 & (1000 - 0001) = 0000;
n = n & (n-1