解法1

#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
scanf("%d",&num);
while(num)
{
if(1 == num%2)
count++;
num = num/2;
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}  //如果是负数,可以试试-1,只循环一次(此代码存在问题)

解法2(按位与法)

#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
int i = 0;
scanf("%d",&num);
for(i=0;i<32;i++)
{
if(1 == ((num>>i)&1))
count++;
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}

解法3(三码循环)

#include<stdio.h>
int main()
{
int num = -1;
int count = 0;
while(num)
{
count++;
num = num&(num - 1);
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}
//很难想到这种方法