1. 程式人生 > >程式設計實現:兩個int整數在二進位制表達中有多少個bit位不同??

程式設計實現:兩個int整數在二進位制表達中有多少個bit位不同??

.程式設計實現: 兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同? 例如:m=1999 n=2999 輸出:有7個bit位不同 首先思考,如何得知兩個數中有多少個不同的個數? 這裡可以採用異或運算,相同為0,不同為1; 將m^n的結果儲存下來,其中1的個數就是m與n在二進位制中bit位不同的數的個數。 接下來就只剩下一個問題等待解決,如何輸出m^n的結果中1的個數? ret=m^n; ret&(ret-1)可以得到ret中1的個數,這個方法詳見: 三種方法返回二進位制中1的個數

最後程式碼如下:

int main(){
	int a = 1999;
	int b = 2999;
	int m = a^b;   //異或運算:相同為0,相異為1
	int count = 1;
	while (m){     //求m中1的個數
		m &= m - 1;
		count++;
	}
	printf("%d與%d的二進位制表達中有%d個bit位不同\n", a, b, count);
	return 0;
}