Python位运算逆操作:如何从合并运算结果中拆分得到两个原始数值
逆操作实现方法
你只需要按高低8位拆分即可,逻辑和原运算完全对应:
- 提取低8位得到
num2:用2^8 -1做掩码和结果做按位与,清空高8位的内容 - 提取高8位得到
num1:把结果直接右移8位,自动抹掉低8位的内容
代码示例
mask = 2 ** 8 - 1 secret = 257 num1 = secret >> 8 num2 = secret & mask print(num1) # 输出 1 print(num2) # 输出 1
原理说明
原运算本质是把两个8位整数打包成1个16位整数:
num1左移8位后占用了16位整数的高8位,num2通过掩码保留低8位- 合并后的257二进制为
00000001 00000001,高8位对应第一个1,低8位对应第二个1,拆分时直接按位截取即可。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

