左移仅作用于整数,左移n位等价于乘2ⁿ,右移n位等价于向下取整除2ⁿ;负数右移按补码进行,python无无符号右移,位数不能为负。

Python 中的位移运算符 (左移)和 <code>>>(右移)用于对整数的二进制位进行移动操作,本质是高效实现乘除 2 的幂次运算,不涉及浮点或字符串,只作用于整数。
左移运算符 `
把一个数的二进制表示整体向左移动 n 位,右边空出的位置补 0。数学上等价于乘以 ^n$(结果为整数,无精度损失)。
-
语法:
x ,其中 <code>x是整数,n ≥ 0 -
例子:
5 → 5 的二进制是 <code>101,左移 2 位得10100= 20,即 $5 × 2^2 = 20$ -
注意:左移不会自动截断,Python 整数任意精度,所以
1 也能算出完整结果
右移运算符 `>>`:向右移动,高位补符号位
把一个数的二进制表示整体向右移动 n 位,右边的位被丢弃,左边补的是**符号位**(正数补 0,负数补 1),因此是**算术右移**。
-
语法:
x >> n,其中x是整数,n ≥ 0 -
例子:
20 >> 2→10100右移 2 位 →101= 5;-20 >> 2→ 补码下结果为 -5(不是无符号右移) -
效果:相当于对整数做“向下取整的除法”,即
x >> n≡x // (2**n)(注意:负数时与 `/` 不同,`//` 是向下取整)
常见用途和注意事项
- 快速乘除:比如
value 比 <code>value * 8在底层更轻量(现代 Python 解释器已高度优化,实际性能差异常可忽略,但语义更清晰) - 位掩码配合:如提取某几位(先右移到最低位,再用
& 1判断)、设置标志位(flags |= 1 表示开启第 3 位) - 没有无符号右移
>>>:Python 不提供类似 Java 的 `>>>`,若需逻辑右移(高位恒补 0),需手动处理,例如对负数:(x + (1 > n(假设 32 位上下文) - 位移位数不能为负:
5 会报 <code>ValueError
小技巧:验证位移是否生效
可以用 bin() 查看二进制形式辅助理解:
-
bin(6)→'0b110' bin(6 → <code>'0b1100'(多一个 0)-
bin(6 >> 1)→'0b11'(少一位)











