为什么sys.maxint ==“ 7fffffffffffffffff”?

时间:2019-04-16 16:35:46

标签: python python-2.7

>>> import sys
>>> print '{0:64b}'.format(sys.maxint)
 111111111111111111111111111111111111111111111111111111111111111
>>> print '{0:16x}'.format(sys.maxint)
7fffffffffffffff

什么?这七个是哪里来的?

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

4 个答案:

答案 0 :(得分:7)

计算二进制表示形式中1的数量。有63个。让我们写64位,以便我们可以看到开头的0:

env

这是最大的64位整数:63个1位,第64位为0。如果最左边的位为1,则将有enviroment。噢亲爱的!当符号位为1时,我们得到负数。不好64 1太多了。

以上,以4为一组:

docker-compose.yml

以十六进制表示:

0111111111111111111111111111111111111111111111111111111111111111

答案 1 :(得分:4)

在2的补码中,可以用N位表示的最高正数是0,后跟N-1 1。将所有N位设置为1会生成-1的表示形式。

因此,在64位系统上,最大整数为63个1位。以十六进制表示的是7,后跟7个f

答案 2 :(得分:2)

在64位表示形式中,可以表示的最高数字为2^63-1

>>> import sys
>>> sys.maxint
9223372036854775807
>>> hex(9223372036854775807)
'0x7fffffffffffffff'
>>> (2**63)-1
9223372036854775807L

对于任何N位表示形式都适用。例如8位,最大值为2^7-1

>>> hex(127)
'0x7f'
>>> hex(128)
'0x80'

答案 3 :(得分:1)

  

什么?这七个是哪里来的?

这行代码的结果:

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

不向您显示前导0。实际上是0b0111111111111111111111111111111111111111111111111111111111111111,即0x7fffffffffffffff

前导位是符号位。因此,在运行该代码的系统上,对于64位整数,最大位数是所有低于该位的位数。