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

Python如何通过位运算在32位整数中存储及提取三个值?

Python通过位运算在32位整数中存储/提取多值

存储三个值到32位整数

首先明确各值的位分配和取值范围:

  • 值A:占低16位(对应题目所说的"前16位"),取值范围必须是 0 ~ 65535(即2^16 - 1),超出会溢出覆盖其他位
  • 值B:占中间8位(第17-24位),取值范围 0 ~ 255(2^8 - 1)
  • 值C:占最高8位(第25-32位),取值范围 0 ~ 255

通过左移和按位或操作合并三个值:

  • 将C左移24位,让它占据32位整数的最高8位
  • 将B左移16位,让它占据中间8位
  • 最后将处理后的C、B和A做按位或,得到合并后的32位整数

代码示例:

# 定义三个符合范围的数值
A = 1234  # 低16位
B = 56    # 中间8位
C = 78    # 最高8位

# 合并为一个32位整数
combined = (C << 24) | (B << 16) | A
print(f"合并后的整数: {combined}")

从整数中提取三个值

通过右移和按位与操作拆分:

  • 提取A:直接用原数和0xFFFF(二进制16个1)做按位与,保留低16位
  • 提取B:先将原数右移16位,把中间8位移到最低位,再和0xFF(8个1)按位与
  • 提取C:先将原数右移24位,把最高8位移到最低位,再和0xFF按位与

代码示例:

# 从合并后的整数中提取值
extracted_A = combined & 0xFFFF
extracted_B = (combined >> 16) & 0xFF
extracted_C = (combined >> 24) & 0xFF

print(f"提取的A: {extracted_A}")
print(f"提取的B: {extracted_B}")
print(f"提取的C: {extracted_C}")

注意事项

  • 必须确保每个原始值在对应的位长度范围内,否则会导致数据溢出,覆盖其他位的数值
  • Python的整数是任意精度的,若要严格模拟32位整数,可以用combined & 0xFFFFFFFF来截断到32位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:50:37