方法一:使用while循环遍历二进制中的每一位
#include<stdio.h>
int num_of_1(unsigned int n)
{
int count = 0;
while(n)
{
if((n%2)==1)
count++;
n = n/2;
}
return count;
}
int main()
{
int n =0;
printf("请输入一个整数:");
scanf("%d",&n);
int ret = num_of_1(n);
printf("%d的二进制形式中有%d个1",n,ret);
return 0;
}
方法二:使用按位操作符,
n&1检查n最低位是否为0,
然后通过右移操作符逐位处理
#include<stdio.h>
int num_of_1(unsigned int n)
{
int count = 0;
while(n)
{
count += n&1;
n >>=1;
}
return count;
}
int main()
{
int n =0;
printf("请输入一个整数:");
scanf("%d",&n);
int ret = num_of_1(n);
printf("%d的二进制形式中有%d个1",n,ret);
return 0;
}
方法三:
#include<stdio.h>
int num_of_1(unsigned int n)
{
int count = 0;
while(n)
{
n = n & (n-1);
count++;
}
return count;
}
int main()
{
int n =0;
printf("请输入一个整数:");
scanf("%d",&n);
int ret = num_of_1(n);
printf("%d的二进制形式中有%d个1",n,ret);
return 0;
}