2017-01-31 4 views
0

私は最近、このコードスニペットfound on Wikipedia出くわしと何が起こっているかのよういくつかの明確化を得るために思っている:ハミング距離直観

int hamming_distance(unsigned x, unsigned y) 
{ 
int dist = 0; 
unsigned val = x^y; 

// Count the number of bits set 
while (val != 0) 
{ 
    // A bit is set, so increment the count and clear the bit 
    dist++; 
    val &= val - 1; 
} 

// Return the number of differing bits 
return dist; 
} 

入力の両方にXOR演算を実行する意義は何ですか?

+1

私はXORがこのアルゴリズムの単純な部分だと言っています。 – harold

答えて

2

この関数は基本的に入力番号の間にという異なるビットのの番号を返します。

これはXOR-これらのビットのみが異なる1に設定される出力を生成する2つの数値で実現されます(表hereを参照)。

その後、XORによって生成され出力されたビットのうち、を数えて返すことだけがです。

+0

これは理にかなっています!ありがとう房 –

+0

私はharoldが正しいと思うが、それはビットを数える方法は、関数のより興味深い部分です。 – Steeve

+0

そのようにビットを数えることの重要性は何ですか? –

関連する問題