汉明距离
汉明距离
概念
1100 和 1010 的汉明距离为2,其实就是二进制异或后1的个数。
怎么求
首先,当然可以将两个数异或后,一个一个数1。。
或者是用n&(n-1)
的技巧,就是执行n中1的个数次后,n&(n-1)
为0。因为无论n是什么数,n&(n-1)
的末位一定是0,想想也对,n的末尾要么是0要么是1,减一之后,进行与操作的话,末位肯定就是0了,而因为要减1,末尾前面的位肯定要退位,所以最终就会得到0
就是求1100和1010的汉明距离,先异或
1100
^1010
-----
0110
然后开始循环n&(n-1)
0110
&0101
-----
0100 一次
0100
&0011
-----
0000 两次
经过两次循环就得到了0,汉明距离就是这个2
def hanming(a, b):
tmp = a ^ b
hm_dis = 0
while tmp:
tmp = tmp & (tmp - 1)
hm_dis += 1
return hm_dis
原本只是想找怎么模拟输入。。