Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么sys.maxint==”是;7ffffffffffffffffffffquot;?_Python_Python 2.7 - Fatal编程技术网

Python 为什么sys.maxint==”是;7ffffffffffffffffffffquot;?

Python 为什么sys.maxint==”是;7ffffffffffffffffffffquot;?,python,python-2.7,Python,Python 2.7,什么?7是从哪里来的 这也不符合我对2的补码的理解。在2的补码中,可以用N位表示的最高正数是0,后跟N-11。将所有N位设置为1将生成-1的表示 因此,在64位系统中,最大整数为63 1位。在64位表示法中,十六进制数为7,后跟7f。可以表示的最大数字是2^63-1 >>> import sys >>> print '{0:64b}'.format(sys.maxint) 1111111111111111111111111111111111111111111

什么?7是从哪里来的


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

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


因此,在64位系统中,最大整数为63 1位。在64位表示法中,十六进制数为
7
,后跟7
f

可以表示的最大数字是
2^63-1

>>> import sys
>>> print '{0:64b}'.format(sys.maxint)
 111111111111111111111111111111111111111111111111111111111111111
>>> print '{0:16x}'.format(sys.maxint)
7fffffffffffffff
它适用于任何N位表示。例如,对于8位,最大值为
2^7-1

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

计算二进制表示中1的数量。其中有63个。让我们写入64位,以便可以看到前导0:

>>> hex(127)
'0x7f'
>>> hex(128)
'0x80'
这是最大64位整数:63 1位,第64位为0。如果最左边的位是1,我们就得到
-1
。哦,天哪!当符号位为1时,我们得到负数。那不好。64 1太多了

以上内容,4人一组:

0111111111111111111111111111111111111111111111111111111111111111
十六进制:

0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
什么?7是从哪里来的

这一行代码的结果是:

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
不会显示前导0。它实际上是
0B0111111111111111111111111111111111111111111111111111111111111111111
这是
0x7fffffffffff


前导位是符号位。因此,在运行此代码的系统上,64位整数的最大数字是所有位都位于该集合之下。

前导位是符号位,因此,设置的所有位下面的位都是允许的最大整数值。这是一个定义:
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111“为什么我的maxint等于2^63-1,而不是像2^64这样的整数?”,或者它是在问“为什么对于k的所有正整数值,2**(4*k+3)-1的十六进制表示总是以7开头?”,或者它是在问其他问题吗?7=1100,这如何使跳跃到-1?注意
7f=127
print '{0:64b}'.format(sys.maxint)