第一种:普通求法
int main()
{
unsigned int a = 0;
int count = 0;
scanf("%d", &a);
while (a)
{
if (a % 2 == 1)
{
count++;
}
a = a / 2;
}
printf("%d\n", count);
return 0;
}
第二种:移位操作符和按位与
int main()
{
int a = 0;
int count = 0;
scanf("%d", &a);
int i = 0;
for (i = 0; i < 32; i++)
{
if (((a >> i)&1)==1)
{
count++;
}
}
printf("%d\n", count);
return 0;
}
第三种:较为高效的一种——直接按位与
int main()
{
int a = 0;
int count = 0;
scanf("%d", &a);
while (a)
{
a = a & (a-1);
count++;
}
printf("%d\n", count);
return 0;
}