我使用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

09-18 01:48