1. 程式人生 > >1059 有多少個1?

1059 有多少個1?

有多少個1?

1、題目內容

Description
計算機中儲存的整數都是按補碼的型式,一個32位有符號整數的補碼的定義為:如果x>=0,則x的補碼等於x的二進位制表示;如果x<0,那麼x的補碼為2^32+x的二進位制表示。請根據給定的整數,求出它的補碼包含有多少位為1。

輸入
每行一個樣例,為一個整數(可以用int表示)。

輸出
每行輸出一個對應樣例的結果。

Sample Input
1
0
-1

Sample Output
1
0
32

2、題目分析

這個題目主要就是考察了二進位制的換算,當x為正數的時候,補碼直接就是它的二進位制,但是如果為負數的話,那麼要將x先加上一個2的32次方,然後再求它的二進位制,即為負數的補碼。但是需要注意的是,由於輸入的數可能會比較大,所以我們需要將資料型別定義為最大的超長整型才可以,不然就會因為溢位然後求錯。

3、參考程式碼

#include<stdio.h>
int main()
{
	long long x;
	while(scanf("%I64d",&x)!=EOF)
	{
		long long count=0;
		if(x<0) //如果x小於0,則需要加上2的32次方 
		{
			x=x+ 4294967296; 
		}
		while(x!=0)
		{
			if(x%2==1)
			{
				count++;
			}
			x/=2;
		}
		printf("%I64d\n",count);
	}
	return 0;
}