写一个函数返回参数二进制中 1 的个数

写一个函数返回参数二进制中 1 的个数 

比如:15 二进制为: 0000 1111 

有四个1 

程序原型: 
int count_one_bits(unsigned int value) 

// 返回 1的位数 
}

如果让我们求一个十进制数中1 的个数,我们会将这个数除以10之后看余数是不是1,然后将得到的商除以10看余数是不是1,依次类推,直到商为0. 
如下图解释: 

例如

十进制数:516

516/10=51......6    6!=1

  51/10=5......1         1==1    只有一个1

   5/10=0......5          5!=1

      商        余数

那么我们求二进制数的时候也一样,将二进制除以2,看得到的余数是不是1,再用商除以2,一直到商为0为止。 
如图: 
这里写图片描述

代码如下:

#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
    int num = 0;
    while(value)//value为0时跳出循环
    {
        if(value%2)//如果余数为1,则num自加1
            num++;
        value = value/2;//将得到的商再付给value
    }
    return num;
}
int main()
{
    int i = 0;
    int num = 0;
    printf("请输入一个正数:");
    scanf("%d",&i);
    num = count_one_bits(i);//num为记录1 的个数
    printf("num=%d\n",num);
    system("pause");
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

结果: 
num=4

还可以用位运算解这道题。 
这里写图片描述 
代码如下:

#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
    int  num = 0;
    while(value)
    {
        if( (value&1) ==1)
            num++;
        value>>=1;//右移
    }
    return num;
}
int main()
{
    int i = 0;
    int num = 0;
    printf("请输入一个正数:");
    scanf("%d",&i);
    num = count_one_bits(i);
    printf("num=%d\n",num);
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhengxinyu666/article/details/80242922