本文共 1157 字,大约阅读时间需要 3 分钟。
其实也谈不上什么思想,这个题目相对还是简单的。
首先,你得知道怎么判断某位是不是1,这个用模2就可以解决,比如:
其它数字也是如此,因此就可以得出结论:模2为0的,其最低位就是0.反之为1
接下来就是要判断所有比特位的数值了,这个可以用右移操作来实现,直观地说就是不断除2,这样使得要判断的每一个比特位最终都移到最后一位,再用上边的办法判断即可。
最后再加上count计数器,就可以轻松实现1个数的统计了。
而打印比特位就更简单了,只要建立一个数组,初始化为0。每一次判断后将相应位置1,再变换下标记可。
#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;}
首先用小数测试,确保其逻辑正确:
再用较大数测试:
这个可以用计算器验证,结果依然是正确的: