您的位置:首页 > 其它

031 二进制1的数量(keep it up, 看到这个问题,刚开始有点蒙)

2015-08-11 08:58 337 查看
剑指offer在标题中:http://ac.jobdu.com/problem.php?pid=1513

题目描写叙述:

输入一个整数,输出该数二进制表示中1的个数。当中负数用补码表示。

输入:

输入可能包括多个測试例子。

对于每一个输入文件,第一行输入一个整数T。代表測试例子的数量。对于每一个測试例子输入为一个整数。

。n保证是int范围内的一个整数。

输出:

相应每一个測试案例。

输出一个整数,代表输入的那个数中1的个数。

例子输入:
3
4
5
-1


例子输出:
1
2
32


正数的原码,补码,反码都同样,都等于它本身
负数的补码是:符号位为1,其余各位求反,末位加1
反码是:符号位为1,其余各位求反,但末位不加1
也就是说,反码末位加上1就是补码
-1011
原码:11011
反码:10100 //负数时,反码为原码取反
补码:10101 //负数时。补码为原码取反+1
移码:00101 //原数+10000

计算机中的正负数都用补码表示,知道这点这题就简单了,由于刚開始还在想怎么把负数的补码求出来。



。汗!

代码:
#include <stdio.h>
#include <stdlib.h>

int getCount1(int vNumber)
{
int i     = 32;
int Count = 0;

while (i--)
{
if (vNumber & 0x00000001) ++Count;
vNumber >>= 1;
}

return Count;
}

int main()
{
int N;
int Number;

scanf("%d", &N);
while (N--)
{
scanf("%d", &Number);
printf("%d\n", getCount1(Number));
}

//system("pause");
return 0;
}

/**************************************************************
Problem: 1513
User:
Language: C
Result: Accepted
Time:80 ms
Memory:912 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: