我已经用十六进制(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