求int型正整数在内存中存储时1的个数

来源:互联网 发布:网络应用层协议有哪些 编辑:程序博客网 时间:2024/06/15 15:23

题目描述

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。


输入描述:

 输入一个整数(int类型)


输出描述:

 这个数转换成2进制后,输出1的个数


输入例子:
5

输出例子:
2


解题思路

首先考虑一个问题,如何将一个十进制整数转化为一个二进制数呢?首先,int型整数在内存中占用4个字节,即32位。其中第一位是符号位,负整数的符号位为1,正整数的符号位为0。因此,我们不妨考虑正整数的情况,负整数可以转化为正整数进行处理。


对于一个正整数num,不停地对它除以2,直到商为0,得到的余数就构成相应的二进制数。因此,我们只需要记录这些余数中1的个数即可。


需要注意的是,最小负整数INT_MIN是无法转化为相应的正整数的,但是它对应的二进制数是已知的,即32位都是1。


代码

#include <iostream>#include <climits>using namespace std;int main(){    int num;    cin >> num;        int count = 0;        if (num == INT_MIN) //最小负数        count = 32;    else if (num < 0) //其它负数    {        num = -num; //化为正数处理        count = 1; //负数的符号位为1    }        while (num > 0)    {        if (num % 2)            count++;                num >>= 1;    }        cout << count << endl;        return 0;}



原创粉丝点击