如何在正确执行位移时固定位长度



我已经用十六进制(0-7ff(生成了x=0-2047。然后,我试着向右移动一点,但我想保持所有的值。

例如对于x=2047=h7ff。我想把这个值向右移动。我可以设置固定的比特长度吗,这样即使我移位,它也不会切割8?

已尝试:

x = 2047
hex(x)='0x7ff'
hex(x >> 1)='0x3ff'

预期:

0x3ff8

如果只想在结果中的一位被截断的情况下添加额外的数字,可以使用简单的模。检查值中的最后一位是否为1,如果是,则将数字乘以0x10或十进制16以添加额外的填充。然后按正常方式移位。

hex((x * 0x10 if x % 2 == 1 else x) >> 1)

将其添加到可重用的方法中:

def rotate(x):
return (x * 0x10 if x % 2 == 1 else x) >> 1

print(hex(x := 0x7ff))
print(hex(x := rotate(x)))
print(hex(x := rotate(x)))
print(hex(x := rotate(x)))
print(hex(x := rotate(x)))
0x7ff
0x3ff8
0x1ffc
0xffe
0x7ff

相关内容

  • 没有找到相关文章

最新更新