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

问题描述 投票:0回答:4
>>> import sys
>>> print '{0:64b}'.format(sys.maxint)
 111111111111111111111111111111111111111111111111111111111111111
>>> print '{0:16x}'.format(sys.maxint)
7fffffffffffffff

什么? 7来自哪里?

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

python python-2.7
4个回答
7
投票

计算二进制表示中的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 1111
7    f    f    f    f    f    f    f    f    f    f    f    f    f    f    f

4
投票

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

因此在64位系统上,最大整数为63个1位。在十六进制中将是7,然后是7个f


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'

1
投票

什么? 7来自哪里?

这行代码的结果:

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

没有显示领先的0.它真的0b01111111111111111111111111111111111111111111111111111111111111110x7fffffffffffffff

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

© www.soinside.com 2019 - 2024. All rights reserved.