版权声明:转自可爱的安安的博客!qq:1085589289 https://blog.csdn.net/ac1085589289/article/details/83659074
Description
计算机中存储的整数都是按补码的型式,一个32位有符号整数的补码的定义为:如果x>=0,则x的补码等于x的二进制表示;如果x<0,那么x的补码为2^32+x的二进制表示。请根据给定的整数,求出它的补码包含有多少位为1。
输入
每行一个样例,为一个整数(可以用int表示)。
输出
每行输出一个对应样例的结果。
Sample Input
1
0
-1
Sample Output
1
0
32
某ACMer的代码(我看不懂)
#include <stdio.h>
int main()
{
unsigned int x;
int sum;
while(scanf("%d",&x)==1){
sum=0;
if(x<0) x=(~x);
while(x!=0){
if(x&1) sum++;
x=x>>1;
}
printf("%d\n",sum);
}
return 0;
}
我这种人写的代码
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)==1)
{
int count=0;
for(int i=0;i<32;i++)
{
if(n&1) ++count;
n=n>>1;
}
printf("%d\n",count);
}
return 0;
}
总结
- 看ACMer大佬的代码。。。看了好久也看不懂的我呀。。。可能这就是差距吧。。。哭哭o(╥﹏╥)o