You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何对二进制数左右移位且不丢失被移出的位

固定位宽二进制循环移位实现方案

你要实现的是固定位宽下的循环移位(又称旋转移位),和Python默认的逻辑移位不同,循环移位会将移出的位拼到数值的另一端,且始终保持指定的位宽,刚好可以满足你不丢失移出位的需求。

以你使用的16位二进制为例,循环左移的实现逻辑如下:

  1. 先对数值做普通左移得到高位部分
  2. 把原数右移位宽-移位位数位,取出原本会被移出的高位
  3. 将两部分做或运算拼接,最后用位掩码保留指定长度的结果即可

代码实现示例

# 指定位宽为16位
BIT_WIDTH = 16
example = 0b1010001110011011
shift = 6

# 16位循环左移实现
rol_result = ((example << shift) | (example >> (BIT_WIDTH - shift))) & ((1 << BIT_WIDTH) - 1)
print(bin(rol_result))
# 输出结果为 0b1110011011101000,和你的预期完全一致

如果需要实现循环右移,只需调整移位顺序即可:

# 16位循环右移shift位实现
ror_result = ((example >> shift) | (example << (BIT_WIDTH - shift))) & ((1 << BIT_WIDTH) - 1)

如果需要适配其他位宽,只需修改BIT_WIDTH的取值即可,比如要做32位循环移位就将其赋值为32。

内容的提问来源于stack exchange,提问作者kevinjack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:45:08