Python位运算——与、或、异或、左移右移

1. 与 &

与运算规则:

1 & 1 = 1
0 & 1 = 0
0 & 0 = 0

以1和5的与运算为例:
1的二进制为 001
5的二进制为 101
仅最后一位都为1,所以结果为001

1 & 5 = 1

2. 或 |

或运算规则:

1 | 1 = 1
1 | 0 = 1
0 | 0 = 0

以4和6的或运算为例:
4的二进制为 100
6的二进制为 110
仅最后一位都为0,所以结果为110

4 | 6 = 6

3. 异或 ^

异或运算规则:

1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0

以9和3的异或运算为例:
9的二进制为 1001
3的二进制为 0011
不相同的位数为右数第2、4位,所以结果为1010

9 ^ 3 = 10

4. 左移 << 右移 >>

左移

x << y的含义为:将x的二进制数向左移动y位
以1为例,
1向左移动一位后得二进制数10,向左移动二位后得二进制数100

1 << 1 = 2
1 << 2 = 4

右移

x >> y的含义为:将x的二进制数向右移动y位
以5为例,
5的二进制数101向右移动一位后得二进制数10,向右移动二位后得二进制数1

5 >> 1 = 2
5 >> 2 = 1

凭借以上内容可解出Leetcode 461.汉明距离

def hammingDistance(x, y):
      # 题目要求求出二进制位不同位置的数目
      # 首先通过异或运算得出不同的位数
      xor = x ^ y
      # 记录距离的变量dis
      dis = 0
      # 因对变量xor进行右移操作,当xor不为0时进行以下操作
      while xor:
      # 通过&1的操作,可判断二进制数的有数第一位是否为1
            if xor & 1:
      # 如果为1,dis变量+1
                  dis += 1
      # 对经过异或运算后的变量xor进行右移
            xor = xor >> 1
      return dis
posted @ 2021-02-13 23:45  Ravenna  阅读(3023)  评论(0编辑  收藏  举报