C语言——确定某数比特位中1的个数并打印其32位比特数值
来源:互联网 发布:visual c#是c语言吗 编辑:程序博客网 时间:2024/05/29 18:33
思想
其实也谈不上什么思想,这个题目相对还是简单的。
首先,你得知道怎么判断某位是不是1,这个用模2就可以解决,比如:
其它数字也是如此,因此就可以得出结论:模2为0的,其最低位就是0.反之为1
接下来就是要判断所有比特位的数值了,这个可以用右移操作来实现,直观地说就是不断除2,这样使得要判断的每一个比特位最终都移到最后一位,再用上边的办法判断即可。
最后再加上count计数器,就可以轻松实现1个数的统计了。
而打印比特位就更简单了,只要建立一个数组,初始化为0。每一次判断后将相应位置1,再变换下标记可。
Code
#include<iostream>#include<Windows.h>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的个数为:" <<count1<< endl; cout << endl; system("pause"); return 0;}
测试
首先用小数测试,确保其逻辑正确:
再用较大数测试:
这个可以用计算器验证,结果依然是正确的:
阅读全文
0 0
- C语言——确定某数比特位中1的个数并打印其32位比特数值
- c语言实现比特位的逆转
- C中位比特操作
- 计算两个数的不同比特位
- 【比特科技】求一个数二进制中1的个数
- 比特位操作——更新二进制
- 比特位操作——二进制表示
- java的比特位枚举
- C语言位运算应用一:求一个数的二进制表示中1的个数
- 第二周作业---二进制数的比特位
- 对无符号整形数的比特位反转
- 如何取出一个数的第一个非零比特位?
- 求32位无符号整数中比特为1的二进制位数
- 位,比特,字节,基本类型字节数
- 比特位操作——二进制中有多少个1
- 2.编程将0-1000所有“水仙花数”打印出来,并打印其总个数。 “水仙花数”是一个 各个位立方之和等于该整数的三位数。
- C语言计算一个数每个位的数值
- 比特位操作——O(1)时间检测2的幂次
- Struts2中的校验框架
- Asp.net MVC中使用JQuery插件ajaxFileUpload上传文件
- hdoj 2026
- es与kibana插件安装
- 图像频谱图
- C语言——确定某数比特位中1的个数并打印其32位比特数值
- hdoj 2027
- Gerrit FAQ
- 如何选择深度学习优化器
- 【简记】Computer Networking——application layer(part one)
- git push 问题:committer 'xxx (x)' does not match your user account
- 25. 编写一个函数,将一个字符串中的非原音字母赋值到另一个字符串中
- BZOJ 2081 [Poi2010] Beads
- Fedora 25 相关配置