方法有两种:
Python的整数可以成长任意大。为了生补码加到了你想要的方式,你需要指定所需的位宽。你的例子展示-199703103在64位的2的,但它只是以及本来的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
Python的整数任意大的,你要屏蔽的值来限制转换到你想要为你的2S表示的位数。
hex(-199703103 &(2**32-1)) # 32-bit
'0xf418c5c1L'
>>>hex(-199703103 &(2**64-1)) # 64-bit
'0xfffffffff418c5c1L'
Python中显示的简单情况hex(-199703103)作为负的十六进制值(-0xbe73a3f)的2S表示将有FS,在它的前面无限多的一个任意精度数。掩码值(2 ** 32-1==0xFFFFFFFF的)限制这样的:FFF...FFFFFFFFFFFFFFFFFFFFFFFFF418c5c1
& FFFFFFFF
--------------------------------------
F418c5c1
Python实战:四周实现爬虫系统(高清视频)百度网盘
链接: https://pan.baidu.com/s/1sdsVPB8uf80pHU8rJI1JVQ
提取码: c6yg 复制这段内容后打开百度网盘手机App,操作更方便哦若资源有问题欢迎追问~