一文掌握 Python 的按位运算¶
计算机中所有的数据都是以二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算都叫位运算。如果我们计算两个数的和,在计算机中都是转换为二进制来进行运算,所以相比在代码中直接使用(+、-、*、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。
位运算符在位级别执行运算,将操作数视为位序列,而不是传统的整数或浮点值。
Python 提供了六个主要的按位运算符:
按位与('&'):如果操作数的两个对应位均为 1,则将结果为 1。
按位或('|'):如果操作数的任一对应位为 1,则结果为 1。
按位异或('^'):如果操作数的两个对应位相同,结果为 0,相异,结果为 1
按位取反('~'):翻转位,将 1 更改为 0,反之亦然。
按位左移('<<'):将操作数的位向左移动指定的位置数。
按位右移('>>'):将操作数的位向右移动指定的位置数。
按位与('&')¶
参加运算的两个数据,按二进制位进行"与"运算。
运算规则:
0&0=0 0&1=0 1&0=0 1&1=1
总结:两位同时为 1,结果才为 1,否则结果为 0。
例如:
3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得 1。
注意:负数按补码形式参加按位与运算。
a = 5 # 101
b = 3 # 011
result = a & b
print(result)
运行结果:
1
与运算的用途:
清零
如果想将一个数清零,只要与一个各位都为零的数值进行与运算,结果为零。
取数的指定位
比如取数 0101 1010 的低 4 位,只需要找一个数高四位是 0,低四位是 1 的数:0000 1111,然后进行按位与运算,结果为 0000 1010,即可得到指定的位。
判断奇偶
根据二进制位的最未位是 0 还是 1 来决定,为 0 就是偶数,为 1 就是奇数。因此可以与 1 进行与运算来判断是不是偶数。
按位或('|')¶
参加运算的两个对象,按二进制位进行"或"运算。
运算规则:
0|0=0 0|1=1 1|0=1 1|1=1
总结:参加运算的两个对象只要有一个为 1,其值为 1。
例如:3|5 即 0000 0011| 0000 0101 = 0000 0111,因此,3|5 的值得 7。
注意:负数按补码形式参加按位或运算。
a = 5 # 101
b = 3 # 011
result = a | b
print(result)
运行结果:
7
或运算的用途:
对一个数的某些位设置为 1,比如 1001 1010 的低 4 位设置为 1,与 0000 1111 进行按位或运算 1001 1111 即可得到。
按位异或('^')¶
参加运算的两个数据,按二进制位进行"异或"运算。
运算规则:
0^0=0 0^1=1 1^0=1 1^1=0
总结:参加运算的两个对象,如果两个相应位相同为 0,相异为 1。
a = 5 # 101
b = 3 # 011
result = a ^ b
print(result)
运行结果:
6
异或运算的用途:
翻转指定位
将数 1010 1010 的低 4 位进行翻转,只需要与 0000 1111 进行异或运算即可得到 1010 0101。
与 0 相异或值不变
1011 1111 ^ 0000 0000 = 1011 1111
交换两个数
a = 5 # 101
b = 3 # 011
a ^= b
b ^= a
a ^= b
print(f"a = {a} b = {b}")
输出:
a = 3 b = 5
取反(~)¶
参加运算的一个数据,按二进制进行"取反"运算。
运算规则:
~1=0 ~0=1
总结:对一个二进制数按位取反,即将 0 变 1,1 变 0。
取反运算的用途:
使一个数的最低位为零,1111&~1 结果为 1110。
左移运算符(<<)¶
将一个数的各二进制位全部左移若干位(相当于将左操作数乘以 2)。
10101110 << 2 结果为 10111000
a = 98
b = a << 1
print('a =',a)
print('bin(a) =',bin(a))
print()
print('b =',b)
print('bin(b) =',bin(b))
print()
a = -98
b = a << 1
print('a =',a)
print('bin(a) =',bin(a))
print('')
print('b =',b)
print('bin(b) =',bin(b))
输出:
a = 98
bin(a) = 0b1100010
b = 196
bin(b) = 0b11000100
a = -98
bin(a) = -0b1100010
b = -196
bin(b) = -0b11000100
右移运算符(>>)¶
将一个数的各二进制位全部右移若干位(相当于该数除以 2)。
a = 98
b = a >> 1
print('a =',a)
print('bin(a) =',bin(a))
print()
print('b =',b)
print('bin(b) =',bin(b))
print()
a = -98
b = a >> 1
print('a =',a)
print('bin(a) =',bin(a))
print('')
print('b =',b)
print('bin(b) =',bin(b))
输出:
a = 98
bin(a) = 0b1100010
b = 49
bin(b) = 0b110001
a = -98
bin(a) = -0b1100010
b = -49
bin(b) = -0b110001
文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈或 V:信息科技云课堂。