输出整形数的二进制数补码中1的个数
首先,我们最先想到循环%2 /2的方法
#include<stdio.h>
int main()
{
int num=0,count=0;
scanf("%d",&num);
while(num)
{
if(num%2==1)
count++;
num=num/2;
}
printf("%d",count);
return 0;
}
但是这种方法有一定的弊端,如果输入的为负数答案会错误,于是我们采取循环移位并按位与1的方法
#include<stdio.h>
int main()
{
int num=0,count=0,i;
scanf("%d",&num);
for(i=0;i<32;i++)//整形数的二进制补码一共有32位
{
if((num>>i&1)==1)//每右移i位按位与1,并与1进行比较
count++;
}
printf("%d",count);
return 0;
}