整數的二進制表示中 1 的個數

題目:整數的二進制表示中 1 的個數

要求:

輸入一個整數,求該整數的二進制表達中有多少個 1。c++

例如輸入 10,因爲其二進制表示爲 1010,有兩個 1,所以輸出 2。編程


分析:

解法一是普通處理方式,經過除二餘二統計1的個數;
spa

解法二與解法一相似,經過向右位移依次處理,每次與1按位與統計1的個數code

解法三比較奇妙,每次將數字的最後一位處理成0,統計處理的次數,進而統計1的個數io


代碼實現(GCC編譯經過):

#include "stdio.h"
#include "stdlib.h"

int count1(int x);
int count2(int x);
int count3(int x);

int main(void)
{
	int x;
	printf("輸入一個數:\n");
	setbuf(stdin,NULL);
	scanf("%d",&x);
	printf("%d轉二進制中1的個數是:",x);
	printf("\n解法一:%d",count1(x));
	printf("\n解法二:%d",count2(x));
	printf("\n解法三:%d",count3(x));
	
	printf("\n");
	return 0;
}

//除2、餘二依次統計每位
int count1(int x)
{
	int c=0;
	while(x)
	{
		if(x%2==1)
			c++;
		x/=2;
	}
	return c;
}

//向右移位,與1按位與統計每位
int count2(int x)
{
	int c=0;
	while(x)
	{
		c+=x & 0x1;
		x>>=1;
	}
	return c;
}

//每次將最後一個1處理成0,統計處理次數
int count3(int x)
{
	int c=0;
	while(x)
	{
		x&=(x-1);
		c++;
	}
	return c;
}


參考資料:編譯

《編程之美》        電子工業出版社class

相關文章
相關標籤/搜索