写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
#include<stdio.h>
/*输出该数的二进制数*/
int print(int n)
{
int i = 0;
int ret = 0;
int arr[32] = {0};
for( i = 0; i < 32;i++)
{
ret = n % 2;
n = n / 2;
arr[i] = ret;
printf("%d",arr[31-i]);
}
return 0;
}
/*方法一:十进制数转换为二进制数,用2辗转相除直至为1得余数*/
int count_one_bit1(unsigned int n)
{
int count = 0;
while(n)
{
if(n % 2 == 1)
{
count++;
}
n = n/2;
}
return count;
}
/*方法二:用右移位得最后一位数与 1按位与“& 1”后,来判断的最后一位是否为1*/
int count_one_bit2(int n)
{
int count = 0;
int i = 0;
for(i = 0; i<32; i++)
{
if(1 == ((n>>i)&1))
{
count++;
}
}
return count;
}
/*方法三:相差为1的两个数,二进制数按位与’&‘后,确定二进制数中的最后一个1
(两数相差为1,故每减1便可判断最后一位是0或1,直至它自身减为1)*/
int count_one_bit3(int n)
{
int count = 0;
while(n)
{
count++;
n = n&(n-1);
}
return count;
}
int main()
{
int num = 0;
int count1 = 0;
int count2 = 0;
int count3 = 0;
printf("please enter one number:\n");
scanf("%d",&num);
print(num);
count1 = count_one_bit1(num);
count2 = count_one_bit2(num);
count3 = count_one_bit3(num);
printf("\n1的个数为:\ncount1 = %d \ncount2 = %d\ncount3 = %d\n",count1,count2,count3);
return 0;
}