一·位运算符
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 | 










