博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言——确定某数比特位中1的个数并打印其32位比特数值
阅读量:4149 次
发布时间:2019-05-25

本文共 1157 字,大约阅读时间需要 3 分钟。


思想


其实也谈不上什么思想,这个题目相对还是简单的。

首先,你得知道怎么判断某位是不是1,这个用模2就可以解决,比如:

1

其它数字也是如此,因此就可以得出结论:模2为0的,其最低位就是0.反之为1

接下来就是要判断所有比特位的数值了,这个可以用右移操作来实现,直观地说就是不断除2,这样使得要判断的每一个比特位最终都移到最后一位,再用上边的办法判断即可。

最后再加上count计数器,就可以轻松实现1个数的统计了。

而打印比特位就更简单了,只要建立一个数组,初始化为0。每一次判断后将相应位置1,再变换下标记可。


Code


#include
#include
using namespace std;int main(){ cout << "请输入要判断的数字:" << endl; int num = 0; cin >> num; int count1 = 0; //定义数组保存位数 char bit[32] = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', }; //从最低位开始打印 int i = 31; while (num) { if (num % 2 == 1)//模2结果为1表明该比特位数值为1 { count1++; bit[i] = '1'; num /= 2;//数据不断右移使当前处理的比特位是最后一位,便于处理 i--; continue; } num /= 2; i--; } cout << "该数比特位打印如下:" << endl; for (int i = 0; i < 32; i++) { cout << bit[i]; } cout << endl; cout << "对应比特位中1的个数为:" <
<< endl; cout << endl; system("pause"); return 0;}

测试


首先用小数测试,确保其逻辑正确:

1

再用较大数测试:

2

这个可以用计算器验证,结果依然是正确的:

3

你可能感兴趣的文章
看完直接怼项目经理!应聘高级Android工程师历程感言,薪资翻倍
查看>>
看完老板就给加薪了!30岁以后搞Android已经没有前途?工作感悟
查看>>
绝了!这么香的技术还不快点学起来,大牛最佳总结
查看>>
网络优化软件apk,金九银十怎么从中小企业挤进一线大厂?我先收藏为敬
查看>>
美团安卓面试,这些年我所经历的所有面试,完整版开放下载
查看>>
美团安卓面试,阿里巴巴Android面试都问些什么?含小米、腾讯、阿里
查看>>
腾讯T2亲自讲解!阿里面试100%会问到的JVM,源码+原理+手写框架
查看>>
腾讯T3亲自讲解!字节大牛耗时八个月又一力作,大牛最佳总结
查看>>
你所不知道的Android原生开发的现状,手慢无
查看>>
做了3年Android还没看过OkHttp源码?小白也能看明白
查看>>
免费Android高级工程师学习资源,挥泪整理面经
查看>>
全世界都在问Android开发凉了吗?赶紧收藏!
查看>>
全世界都在问Android开发凉了吗?送大厂面经一份!
查看>>
全网最具深度的三次握手、四次挥手讲解,最全Android知识总结
查看>>
全网最具深度的三次握手、四次挥手讲解,看这一篇就够了!
查看>>
全网最具深度的三次握手、四次挥手讲解,知乎上转疯了!
查看>>
全靠这份Android知识点PDF大全,完整版开放下载
查看>>
关于Android程序员最近的状况,大厂内部资料
查看>>
从草根到百万年薪程序员的十年风雨之路,成功收获美团,小米安卓offer
查看>>
价值2000元的学习资源泄露,实战篇
查看>>