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
相关产品推荐
相关产品推荐

