1. 程式人生 > >數字之美之-------求二進位制中1的個數

數字之美之-------求二進位制中1的個數



最簡單的方法就是,直接異或A^B,得等到的結果中1的個數就表示整數A和B的二進位制表示中有多少位是不同的。

這是一類問題的變形,原題是:求二進位制中1的個數?

#include <stdio.h>

void main()
{
	int num=0;
	unsigned int var1,var2;
	unsigned int result;


	scanf("%d%d",&var1,&var2);
	printf("%d %d\n",var1,var2);
	result = var1 ^ var2;   //異或運算
	printf("%d\n",result);
	while(result)     //求正整數result裡含有的1的個數
	{
		num +=(result)&(0x01);
		result>>=1;      //這裡容易出錯!!!! 首次編寫的時候寫成result>>1;造成死迴圈 
	}
	printf("%d\n",num);
}

首次編寫的時候寫成result>>1;造成死迴圈 ,如果是result>>1,result的值並沒有變化,一定要result=result>>1.

另外,移位運算比(除+取模運算)效率更高,所以採用移位運算!