我使用python 2.6
>>> hex(-199703103)
'-0xbe73a3f'
>>> hex(199703103)
'0xbe73a3f'
正值和负值相同吗?
当我使用calc时,值是
FFFFFFFFF418C5C1
。 最佳答案
Python的整数可以任意增大。为了以您希望的方式计算原始two's-complement,您需要指定所需的位宽。您的示例以64位二进制补码形式显示-199703103
,但它也可能是32位或128位,因此开头的0xf
数量不同。hex()
不这样做。我建议以下方法:
def tohex(val, nbits):
return hex((val + (1 << nbits)) % (1 << nbits))
print tohex(-199703103, 64)
print tohex(199703103, 64)
打印输出:
0xfffffffff418c5c1L
0xbe73a3fL