Python的二进制数操作,计算汉明距离(Hamming Distance)为例
最近发现了LeetCode这个好网站,做了几道题,今后刷LeetCode学习到的新知识我都尽量抽时间记录下来,同时分享给大家。
今天就从LC上一道题说起:
Given two integers x and y, calculate the Hamming distance.
Hamming distance:
- 中文为汉明距离,它表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。
先把我自己的答案贴上来:
class Solution(object):
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
hamming_distance = 0
s = str(bin(x^y))
for i in range(2,len(s)):
if int(s[i]) is 1:
hamming_distance += 1
return hamming_distance
其中python内置函数 bin() 的作用是将输入的十进制数,转换成二进制,但需要注意的是这个二进制输出是一个str类型:
python中使用0b字符作为前缀表示二进制数,用0b表示的二进制数同样可以进行任何操作,比如加减乘除。
接下来就是罗列一下python中的位运算符:
1,与运算(&、and)
规则: 0&0=0; 0&1=0; 1&0=0; 1&1=1;
例子: 1 & 4
0001
&
0100
=
0000
因此:1 & 4 = 0
2,或运算( | 、or)
规则: 0|0=0; 0|1=1; 1|0=1; 1|1=1;
例子: 1 | 4
0001
|
0100
=
0101
因此:1 | 4 = 5
3,异或运算( ^ )
规则: 0^0=0; 0^1=1; 1^0=1; 1^1=0;
例子: 1 ^ 4
0001
^
0100
=
0101
因此:1 ^ 4 = 5
4,取反运算( ~ )
规则: ~1=0; ~0=1;
例子: 5 & ~1
0101
&
1110
=
0100
因此:5 & ~1 = 4,实现使最低位为零
5,右移运算( >> )
规则: 将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
例子: a = a >> 2
将a的二进制位右移2位
每右移一位,相当于该数除以2。
6,左移运算( << )
规则: 将一个数的各二进制位全部左移若干位,右边补0,左边二进制位丢弃。
例子: a = a << 2
将a的二进制位左移2位,右补0
每左移一位,相当于该数乘以2。