写一个函数返回参数二进制中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的个数的几种方法

方法一: 首先,简单思路为:给该整数模2除2我们就能得到该数2进制的每一位 用9举例,9的二进制数为1001   (9%2=1,(9/2)%2=0, (9/2/2)%2=0, (9/2/2/2)%...

.写一个函数返回二进制参数值为1的个数

写一个函数返回二进制参数值为1的个数 例如:15    0000 1111     返回4个1 程序原型:int count one bits(unsigned int value) { //...

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

一个数要想求二进制中的每一位,就是不断地%2 再 /2,一直进行下去,直到为0.#include #include int count_one_bits(unsigned int value) ...

C语言实现谷歌面试题:写一个函数返回参数二进制中 1 的个数

写一个函数返回参数二进制中 1 的个数 比如: 15       0000 1111       4 个 1 方法一:参数为整形参数,首先需要将整形参数转换为二进制序列,需要对这个参数进行模2除2。参...

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

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

练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。

这个题目呢,首先需要确定数据类型,在这里我选择的数据类型是unsigned类型,具体实现方法很简单,先得到unsigned类型数据的长度len,然后将x的后n位提取出来,左移len-n位得到end,然...

练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。

这个题目呢,首先需要确定数据类型,在这里我选择的数据类型是unsigned类型,具体实现方法很简单,先得到unsigned类型数据的长度len,然后将x的后n位提取出来,左移len-n位得到end,然...

Chapter 3 | Stacks and Queues--实现一个函数返回栈中的最小值,时间复杂度为O(1)

3.2  How would you design a stack which, in addition to push and pop,also has a function min which r...

exit和_exit 进程终止有5种方法: 1正常终止 (1)从main函数返回 (2)调用exit (3)调用_exit 2异常终止 (1)调用abort (2)由一个信号来终止 exi

四个函数的声明分别是:         void* realloc(void* ptr, unsigned newsize);         void* malloc(unsigned size...

Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值

一.什么是指针? 简单来说: 指针就是内存地址      内存地址就是指针。来看个小案例 #include #include /** 指针就是内存地址 内存地址就是指针 */ main(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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