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