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

原创 2016年06月02日 10:44:14

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

分析:

(1)输入一个数

(2)判断它是否为0。

(3)如果不为0,就对它进行模2取余,模2的过程就相当于把这个数向右移除了一位,如果余数为1,则证明移除的这一位为1,就将其记录下来。如果余数为0,就证明移除的这一位为0,就不记录。

(4)经过第3步以后,对这个数进行除2取整,再进入到第2步中。如此循环,直到第3步中判断为0。

注意:

(1)对于负数,在内存中是以其补码形式存放的。例如-1,它的二进制中有32个1。

(2)以下方法中对于函数形参的定义方式有两种,一种是无符号整型,一种是有符号整型。

(3)“>>”为右移运算符,>>1表示右移一位,它的意思是说将最右边的一位移出内存的存储空间里。

方法1:

#include<stdio.h>
int count_one_bits(unsigned int value)
{
int count=0;
while(value)
{
if(value%2==1) 
{
count++;
}
   value=value/2;
}
return count;
}
int main()
{
    unsigned int num=0;
int ret=0;
scanf("%d",&num);
    ret=count_one_bits(num);
printf("count=%d\n",ret);
return 0;
}

方法2:

#include<stdio.h>
int count_one_bits(int value)
{
int count=0;
int i=32;
while(i)
{
if(value&1==1)
{
count++;
}
   value=value>>1;
   i--;
}
return count;
}
int main()
{
    int num=0;
int ret=0;
scanf("%d",&num);
    ret=count_one_bits(num);
printf("count=%d\n",ret);
return 0;
}

方法3:

#include<stdio.h>
int count_one_bits(int value)
{
int count=0;
while(value)
{
   count++;
   value=value&(value-1);
}
    return count;
}
int main()
{
    int num=0;
int ret=0;
scanf("%d",&num);
    ret=count_one_bits(num);
printf("count=%d\n",ret);
return 0;
}


本文出自 “Stand out or Get out” 博客,请务必保留此出处http://jiazhenzhen.blog.51cto.com/10781724/1705001

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

#include #include int _Count(int n) { int arr[30]; int i=0; int j=0; int m=0; while(n) { ar...
  • qq_33951180
  • qq_33951180
  • 2016年05月14日 16:47
  • 628

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

通过C语言程序将十进制数转化成二进制数,然后求出二进制数中1的个数。下面用三种方法来实现。来方法一:除2取余法。对一十进制数,用2辗转相除至结果为1,将余数和最后的1从下向上倒序写就是对应的二进制。例...
  • Scenlyf
  • Scenlyf
  • 2016年06月11日 18:49
  • 1660

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

在实现这道题之前,我们先来了解下原码、反码、补码。 一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1 原码:...
  • yin1031468524
  • yin1031468524
  • 2017年02月16日 10:02
  • 1209

剑指offer——面试题10输入一个十进制整数,统计其中二进制1的个数

/** * 题目:输入一个十进制整数,统计其中二进制1的个数 * @author 大闲人柴毛毛 */ public class CountBitOne { /** * 这个问题最直观的思路...
  • u010425776
  • u010425776
  • 2016年03月09日 16:42
  • 1842

求一个整数中二进制1的个数

题目:求一个整数二进制表示1的个数   第一版: 思路:如果一个整数与1做与运算,结果为1,那么该整数最右边一位是1,否则是0; int NumberOf1(int n) { int c...
  • djb100316878
  • djb100316878
  • 2014年12月18日 08:55
  • 2719

网易游戏笔试题:输入一个数n,返回一个数组,数组中每个元素对应[0,n]每个数的二进制中1的个数

题目: 输入一个数n(保证输入正数),返回一个数组,数组中每个元素对应[0,n]每个数的二进制中1的个数 如:n=5,返回A=[0,1,1,2,1,2] 给出的函数声明int* BitCou...
  • iamxiaoguizi
  • iamxiaoguizi
  • 2016年04月17日 17:04
  • 777

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

#include #include int _Count(int n) { int arr[30]; int i=0; int j=0; int m=0; while(n) { ar...
  • qq_33951180
  • qq_33951180
  • 2016年05月14日 16:47
  • 628

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

正数的原反补码相同,我们要统计二进制位中一的个数,那就需要拿出三十二位bit位中的每一位,然后按位 &1,如果这一位的数字是1,那么完成&1的运算之后就会得到1,在之前先定义一个计数器,当出现1的时候...
  • zb1593496558
  • zb1593496558
  • 2017年11月23日 16:01
  • 47

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

用函数返回参数二进制中1的个数
  • yiyi0116
  • yiyi0116
  • 2016年11月04日 18:32
  • 174

华为机试题---统计一个数字转为二进制0和1的个数

一、问题描述 功能描述:统计一个数字转为二进制后,0和1的个数,组成数组返回 输入:6 输出:{1,2} 二、算法分析    要把一个数字转为二进制就得为这个数字不断取余数 ,如果能整除则为...
  • sxb0841901116
  • sxb0841901116
  • 2014年03月10日 12:24
  • 1324
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:写一个函数返回参数二进制中1的个数
举报原因:
原因补充:

(最多只允许输入30个字)