C语言——确定某数比特位中1的个数并打印其32位比特数值

来源:互联网 发布:visual c#是c语言吗 编辑:程序博客网 时间:2024/05/29 18:33

思想


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

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

1

其它数字也是如此,因此就可以得出结论:模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;}

测试


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

1

再用较大数测试:

2

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

3

原创粉丝点击