题目描述
计算机中存储的整数都是按补码的型式,一个32位有符号整数的补码的定义为:
如果x>=0,则x的补码等于x的二进制表示;
如果x<0那么x的补码为2^32+x的二进制表示。
请根据给定的整数,求出它的补码包含有多少位为1。
输入格式
每行一个样例,为一个整数(这个整数不会超出int范围)。
输出格式
每行输出一个对应样例的结果。
输入样例
1
0
-1
输出样例
1
0
32
#include <stdio.h>
int main()
{
unsigned int x;
int sum;
while(scanf("%d",&x)!=EOF)
{
sum=0;
if(x<0)
{
x=(~x);//按位取反
}
while(x!=0)
{
if(x&1)//与运算只有 1&1=1,其他与运算都得0;按x的最后一位算
{
sum++;
}
x=x>>1; //右移操作符x的位次向右位移一位
}
printf("%d\n",sum);
}
return 0;
}```