Python3 位运算符

位运算符 将数字(整数、浮点数)看作二进制来进行位与 $、位或 |、位异 ^、取反 ~、左移动 <<、右移动 >>操作

& 按位与运算符

若两个值的二进制的相应位均为 1 则该位是 1 ,否则是 0

1
2
3
4
5
a = 7
b = 23
a = 0000 0111
b = 0001 0111
a & b = 0000 0111

举例:

1
2
3
4
a = 7
b = 23

print(a & b)

结果:

1
7

| 按位或运算符

若两个值的二进制的相应位有一个为 1 则该位是 1 ,否则是 0

1
2
3
4
5
a = 7
b = 23
a = 0000 0111
b = 0001 0111
a | b = 0001 0111

举例:

1
2
3
4
a = 7
b = 23

print(a | b)

结果:

1
23

^ 按位异或运算符

若两个值的二进制的相应位不同则该位是 1 ,否则是 0

1
2
3
4
5
a = 7
b = 23
a = 0000 0111
b = 0001 0111
a ^ b = 0001 0000

举例:

1
2
3
4
a = 7
b = 23

print(a ^ b)

结果:

1
16

~ 按位取反运算符

将值的二进制位取反,即 0110

1
2
3
a = 7
a = 0000 0111
~ a = 1111 1000

举例:

1
2
3
a = 7

print(~ a)

结果:

1
-8

解释:

原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位,1代表负,0代表正

反码:反码可由原码得到。如果是正数,反码与原码相同;如果是负数,反码是其原码(符号位除外)各位取反而得到的

补码:补码可由原码得到。如果是正数,补码与原码相同;如果是负数,补码是对其原码(除符号位外)各位取反,并在末位加1而得到的(有进位则进位,但不改变符号位)

a~ 取反得到 1111 1000 ,首位 1 表示负数,现代计算机普遍采用 补码 表示负数,补码1000 0111 末位加 11000 1000,等同 -0000 1000

公式总结为 ~a = -a-1

<< 左移动运算符

将二进制位向左移动若干位,高位丢弃,低位补零,位数由 << 右边数字指定

1
2
3
a = 7
a = 0000 0111
a << 2 = 0001 1100

举例:

1
2
3
a = 7

print(a << 2)

结果:

1
28

>> 右移动运算符

将二进制位向右移动若干位,低位丢弃,高位补零,位数由 >> 右边数字指定

1
2
3
a = 7
a = 0000 0111
a >> 2 = 0000 0001

举例:

1
2
3
a = 7

print(a >> 2)

结果:

1
1