用c语言实现输入一个十进制数,计算其转换为二进制数后其中包含1的个数
2015-03-19 20:13
393 查看
这个问题有两个解决方法。第一个就是用我们平时十进制转换二进制的算法,即短除法。
第二个就是用其本身与上其二进制数减一,
例如:x&(x-1) 当x=5时, 5的二进制是0101
0101 & (0101-1) == 0101 & 0100 == 0100
0100 & (0100-1) == 0100 & 0011 == 0000
一共计算了两次,也就是说5的二进制数一共只有2个1.
下面是代码实现:
这是第二种算法:
第二个就是用其本身与上其二进制数减一,
例如:x&(x-1) 当x=5时, 5的二进制是0101
0101 & (0101-1) == 0101 & 0100 == 0100
0100 & (0100-1) == 0100 & 0011 == 0000
一共计算了两次,也就是说5的二进制数一共只有2个1.
下面是代码实现:
#include<stdio.h> int count_bits(unsigned int value)//定义形参 { int one = 0;//定义计数器 while(value != 0) { if(value % 2 == 1)//短除法计算 { one ++; value = value / 2; } } return one; } int main() { int ret = 0; ret = count_bits(15);//调用函数 printf("%d\n",ret); return 0; }
这是第二种算法:
#include<stdio.h> int count_bit(unsigned int value) { int count = 0; while(value) { count++; value = value & (value - 1);//value与其二进制减1,结果再赋给value } return count;//返回计数器 } int main() { int ret = 0; ret = count_bit(5); printf("%d\n",ret); return 0; }
相关文章推荐
- C语言,进制转换(输入一个字节内的数(0~255),然后将该数的转换为二进制数,然后将高四位和低四位互换)
- java 输入一个二进制数,把它转换为十进制数并输出
- C语言-进制转换-输入一个字节的整数(0~255),然后将该数的转换为二进制数,然后将奇数位和偶数位互换
- 用C语言来实现_输入一个日期(年月日),计算是这一年中的第几天(集思广议)
- Java中输入一个十进制数,如何转换为二进制数
- 输入一个十进制数N,将它转换成R进制数输出(运用递归实现)
- C语言实现 读取标准输入,并将其中大写字母转换为小写字母
- 用C语言来实现_输入一个日期(年月日),计算是这一年中的第几天
- 【c语言】多种方法:将十进制数转化成二进制数,计算其中1的个数
- 实现一个输入十进制数转换成八进制数
- 求一个十进制数转换为二进制数时包含1的个数
- 第二周任务1:输入一个十进制数转换成二进制数 方法2
- 字符串匹配问题:输入一个字符串,计算其中包含的‘连续’给定的子字符串最长的个数.
- C语言:从键盘输入一个字符串,以感叹号!作为结束标志,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。
- 用户在文本框中输入需要转换的十进制数,通过点击3个按钮在标签中显示结果。(点击一个实现一个)
- 编写一个计算某个月份的天数程序,请用if-else条件语句实现。要求根据用户输入的月份,判断出月份所包含的天数。
- 链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。 用C语言编写 用以存放输入的二进制数 建立 一个带头结点的线性链表
- C语言从键盘输入一个十进制数将其转换为任意进制数输出
- 输入4个整数,找出其中最大的数,用一个函数来实现.cpp
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都按照从左到右的递增的顺序排序,输入这样的一个数组和一个数,判断数组中是否包含这个数