Python's integers can grow arbitrarily large. In order to compute the raw two's-complement the way you want it, you would need to specify the desired bit width. Your example shows -199703103
in 64-bit two's complement, but it just as well could have been 32-bit or 128-bit, resulting in a different number of 0xf
's at the start.
hex()
doesn't do that. I suggest the following as an alternative:
def tohex(val, nbits):
return hex((val + (1 << nbits)) % (1 << nbits))
print tohex(-199703103, 64)
print tohex(199703103, 64)
This prints out:
0xfffffffff418c5c1L
0xbe73a3fL
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…