正题
#include <stdio.h>
#include <stdlib.h> // itoa
int main()
{
int a;//a:数
scanf("%d",&a);
char b[32];//用于输出二进制
itoa(a,b,2);//使进制转化的函数
printf("该数的二进制表示为:%s\n",b);
//法一:通过逐个位与1进行与运算来计数;1_1为向左移。
int n1_1=0;
for(int i=0;i<32;i++)
{
if((a&(1<<i))==(1<<i))
n1_1++;
}
printf("第一种方法结果为%d\n",n1_1);
//法一的变式:向右移来”与“。
int n1_2=0;
for(int i=0;i<32;i++)
{
if(((a>>i)&1)==1)
n1_2++;
}
printf("第一种方法变式结果为%d\n",n1_2);
//(x-1)&x:可以去掉x二进制里的最后的一个1
int n2=0;
for(;a!=0;)
{
a=(a-1)&a;
n2++;
}
printf("第二种方法结果为%d\n",n2);
}