2017-09-05 102 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运算符来查找差异,那么您在技术上将计算两个输入数字二进制表示的汉明距离。