Python的二进制数位运算,计算汉明距离(Hamming Distance)为例

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。

你可能感兴趣的:(学习记录)