为什么 sys.maxint == "7ffffffffffffffff"?

>>> import sys

>>> print '{0:64b}'.format(sys.maxint)

 111111111111111111111111111111111111111111111111111111111111111

>>> print '{0:16x}'.format(sys.maxint)

7fffffffffffffff

什么?7 是从哪里来的?


这也不符合我对 2 的补码的理解。


慕工程0101907
浏览 284回答 3
3回答

富国沪深

计算二进制表示中 1 的数量。其中有 63 个。让我们写入 64 位,这样我们就可以看到前导 0:0111111111111111111111111111111111111111111111111111111111111111这是最大的 64 位整数:63 个 1 位,第 64 位为 0。如果最左边的位是 1,我们将有-1. 哦亲爱的!当符号位为 1 时,我们得到负数。那不好。64 个 1 实在太多了。以上,4人一组:0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111并以十六进制表示:0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 11117    f    f    f    f    f    f    f    f    f    f    f    f    f    f    f

慕的地8271018

在 2 的补码中,可以用N位表示的最高正数0后跟N-1 1's。将所有N位设置为1产生 的表示-1。所以在 64 位系统上,最大整数是 63 个 1 位。以十六进制表示,7后跟 7 f。

慕田峪7331174

在 64 位表示中,可以表示的最高数是2^63-1,>>> import sys>>> sys.maxint9223372036854775807>>> hex(9223372036854775807)'0x7fffffffffffffff'>>> (2**63)-19223372036854775807L它适用于任何 N 位表示。例如对于 8 位,最大值为2^7-1>>> hex(127)'0x7f'>>> hex(128)'0x80'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python