2017-09-05 106 views
1

我嘗試下面的代碼,用於計算兩個十進制數的漢明距離,並得到了預期的結果數目的漢明距離:如何計算具有二進制格式

SELECT BIT_COUNT('16056695327593349911'^'13147651924325057303') AS hamming_distance ;  

output : 8 

但是,當我嘗試了上述兩個十進制數轉換爲二進制,它給了我一個錯誤的結果:

我想下面的查詢:

SELECT BIT_COUNT(CAST(CONV('16056695327593349911',10,2) AS UNSIGNED INTEGER)^CAST(CONV('13147651924325057303',10,2) AS UNSIGNED INTEGER)) AS hamming_distance ; 

output: 0 

我想要計算兩個二進制數的漢明距離。

回答

1

有沒有這樣的事情「二進制數字」「十進制數」。 A number是數量。十個項目是十個項目,無論您是將其編號設爲10(基數10),1010(基數2),'X'(羅馬數字)或'ten'(英文)。這個數字還是一樣的,只是我們寫的方式不同。

bitwise XOR operator不關心你如何編寫數字,它在內部以二進制表示它們,並對它們的位應用XOR操作。

這是你如何發佈的數字(1605669532759334991113147651924325057303)看在二進制:

1101111011010100110101110101010000010011111000000100000000000000 
1011011001110101110101111100010000010011111000000100000000000000 
^^^^^ ^ ^^ 

標誌着我在它們的下方8位置,他們在他們的二進制表示不同。這個數字(8)是你計算的漢明距離。

16056695327593349911^13147651924325057303值是7539307869670211584其二進制表示如下:

0110100010100001000000001001000000000000000000000000000000000000 
^^^^^ ^ ^^ 

請注意,對標在第一個圖(其中輸入的數字在他們的二進制表示有不同的位位置1 )和0其中輸入數字的相應位相等。


兩個字符串的Hamming distance是它們不同的位置數。如果使用按位XOR運算符來查找差異,那麼您在技術上將計算兩個輸入數字二進制表示的漢明距離。