2012-03-31 38 views
3

可能重複:
Best algorithm to count the number of set bits in a 32-bit integer?比較兩個二進制數和獲得有多種不同的位

我想編寫一個程序來獲得比較兩個numbers.if I 1的位號比較任意兩個數字 之間的位以找出二進制數在1和0中的不同位置。換句話說,異或(XOR)關係是 。

一樣,如果22(其具有10110二進制),並用15比較它(其具有01111二進制)

第一個10110

第二個01111

結果11001

,答案是25,但我想得到的是3,其中有三個1和0是不同的。

+1

某些CPU有口算一種特殊的硬件指令。知道編譯器是否知道這個並可以發出相關代碼會很有趣。 – 2012-03-31 09:46:33

+0

這叫做[Hamming Distance](http://en.wikipedia.org/wiki/Hamming_Distance)。 – Potatoswatter 2012-03-31 11:03:15

+0

__builtin_popcount(22^15)= 3 – 2018-01-29 07:06:42

回答

2

Hrmmm,想到的第一個非遞歸思想是:

int a = ...; 
int b = ...; 
int x = a^b; 

int count; 

for (int i = 0; i < 32; ++i) { 
    if (x & (1 << i)) { 
     ++count; 
    } 
} 
2
+1

+1。如果你的程序花了很多時間來做這件事,那麼使用庫函數是很重要的,因爲大多數微處理器都有一個專門的「人口數」指令,否則很難移植到其他地方。另請注意,'bitset'支持XOR和從'unsigned long'編號轉換。 – Potatoswatter 2012-03-31 11:05:57