一·位运算符
python中位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等),在应用层开发(Web 开发、Linux 运维等)中并不常见。
Python 位运算符只能用来操作整数类型,它按照整数在内存中的二进制形式进行计算。
符号
名称
描述
&
按位与
只有两边二进制位数均为1时,输出才为1
|
按位或
只要二进制位数有一边为1,输出就为1
^
按位异或
两边的二进制数不同时为1,相同时为0
~
按位取反
加上该符号,如果原本数为正数,则加上一个负号,二进制加1输出。
如果原本数为负数,则加上一个负号,二进制减1输出。
<<
按位左移
将各个二进制位全部左移若干位
>>
按位右移
将各个二进制位全部右移若干位
二·详细说明与代码解释
我们以整数121和122作为例子,bin()方法是获取整数的二进制形式,以下代码中显示的0b是二进制的标志也是代表省略的0。
1·按位与运算符&
print(bin(121))输出结果:0b1111001
print(bin(122))
输出结果:0b1111010
print(121 & 122)
# 输出结果:120
print(bin(120))
# 输出结果:0b1111000
通过以上代码可以观察出使用&符号时,只有输入的两边二进制位均为1时,才会输出为1。
整数
二进制
输入1
121
0b1111001
输入2
122
0b1111010
输出3
120
0b1111000
2·按位或运算符|
print(bin(121))输出结果:0b1111001
print(bin(122))
输出结果:0b1111010
print(121 | 122)
# 输出结果:123
print(bin(123))
# 输出结果:0b1111011
通过以上代码可以观察出使用|符号时,只要输入的二进制位数有一边为1,输出的二进制就为1。
整数
二进制
输入1
121
0b1111001
输入2
122
0b1111010
输出3
123
0b1111011
3·按位异或运算符^
print(bin(121))输出结果:0b1111001
print(bin(122))
输出结果:0b1111010
print(121 ^ 122)
# 输出结果:3
print(bin(3))
# 输出结果:0b11 也就是0b0000011
通过以上代码可以观察出使用^符号时,输入的两边的二进制数不同时输出为1,相同时输出为0。
整数
二进制
输入1
121
0b1111001
输入2
122
0b1111010
输出3
3
0b0000011
4·按位取反运算符~
print(bin(121)) # 为正数时输出结果:0b1111001
print(~121)
输出结果:-122
print(bin(-122))
输出结果:-0b1111010
print(bin(-121)) # 为负数时
输出结果:-0b1111001
print(~-121)
输出结果:120
print(bin(120))
输出结果:0b1111000
通过以上代码可以观察出使用~符号时,加上该符号,如果原本数为正数,则加上一个负号,二进制加1输出。
如果原本数为负数,则加上一个负号(负负得正),二进制减1输出。
正数
整数
二进制
输入1
121
0b1111001
输出2
-122
-0b1111010
负数
整数
二进制
输入1
-121
-0b1111001
输出2
120
0b1111000
5·按位左移运算符<<
print(bin(121))输出结果:0b1111001
print(121 << 3) # 二进制数往左移动3位
输出结果:968
print(bin(968))
输出结果:0b1111001000
通过以上代码可以观察出使用<<符号时,将各个二进制位全部左移了3位。
整数
二进制
输入1
121
0b1111001
输出2
968
0b1111001000
6·按位右移运算符>>
print(bin(121))输出结果:0b1111001
print(121 >> 3) # 二进制数往右移动3位
输出结果:15
print(bin(968))
输出结果:0b1111 往右移出界限的直接没有了
通过以上代码可以观察出使用>>符号时,将各个二进制位全部右移了3位(往右移出界限的直接没有了)。
整数
二进制
输入1
121
0b1111001
输出2
15
0b1111