方法一:
#include <stdio.h>
int main()
{
int a = 15;
int count = 0;
while (a > 0)
{
if (a % 2 == 1)
{
count++;
}
a=a / 2;
}
printf("%d", count);
return 0;
}
缺陷:只可以计算正数
方法二:
#include <stdio.h>
int main()
{
int a = 0;
int count = 0;
scanf("%d", &a);
for (int i = 0; i < 32; i++)
{
if (((a >> i) & 1) == 1)
{
count++;
}
}
printf("%d", count);
return 0;
}
& 与的意思是两位都是1才是1,每次比较完都把二进制数向右移进行比较
方法三 :
#include <stdio.h>
int main()
{
int a = 0;
int count = 0;
scanf("%d", &a);
while (a)
{
a = a & (a - 1);
count++;
}
printf("%d", count);
return 0;
}
每进行一次下一个a比上一个a少后面的一个1
结果