问题描述: 输入一个int型数据,计算出该int型数据在内存中存储时1的个数。
知识点:字符串,查找
输入:输入一个整数(int型)
输出:这个数转换成2进制后,输出1的个数。
样例输入:5
样例输出:2
问题分析:数据以其补码形式存储,整数的补码就是本身,复数的补码是其反码+1;( -10 原码是 10001010 取反得 11110101 加一得 11110110)
所以,问题的关键的是统计1的个数,可以用&0x001来确定最后一位是不是1,同时用移位符>>1,来判断接下来的。
代码:
#include <iostream>
using namespace std;
int main()
{
int x;
cin>>x;
int num=0;
if(x>=0)
{
while(x)
{
num=num+(x&0x0001);
x=x>>1;
}
cout<<num<<endl;
}
else
{
x=~x;
while(x)
{
num=num+(x&0x0001);
x=x>>1;
}
cout<<32-num<<endl;
}
return 0;
}