Python中最小负值

9 投票
7 回答
30595 浏览
提问于 2025-04-16 07:26

我认为在Python中,最小的整数应该是 -maxint-1

我觉得如果有一个值是 -2,就会导致整数溢出。

from sys import maxint
maximum_int = maxint
minimum_int = -maxint - 2
#  2147483647
# -2147483649
print maximum_int
print minimum_int

但是,结果显示是正确的,并且显示了一个比 -maxint-1 更小的值。

请问这是为什么呢?

7 个回答

2

在Python中,当整数(int)的值变得非常大时,它会自动转换成一种叫做任意精度长整型(long),这个类型的大小只受限于你电脑的内存。

你可以通过下面的代码来观察这种转换:

import struct
from sys import maxint
maximum_int = maxint
minimum_int = -maxint-1
big_minus = -maxint-(maxint*maxint)
big_plus=maxint*maxint*maxint

def platform():
    return struct.calcsize("P") * 8

def bit_length(x):
    s=bin(x)
    s=s.lstrip('-0b')
    return len(s)

print
print 'running in   ', platform(), ' bit mode...'   
print 'maxint:      ', maximum_int, ' bits: ', bit_length(maximum_int)
print 'minint:      ', minimum_int, ' bits: ',  bit_length(minimum_int)
print 'a big minus: ', big_minus, ' bits: ', bit_length(big_minus)
print 'big_plus:    ', big_plus, ' bits: ', bit_length(big_plus)
print

在32位的Python环境下,运行后会得到这样的结果:

running in    32  bit mode...
maxint:       2147483647  bits:  31
minint:       -2147483648  bits:  32
a big minus:  -4611686016279904256  bits:  62
big_plus:     9903520300447984150353281023  bits:  93

在64位的Python环境下,结果会是这样的:

running in    64  bit mode...
maxint:       9223372036854775807  bits:  63
minint:       -9223372036854775808  bits:  64
a big minus:  -85070591730234615856620279821087277056  bits:  126
big_plus:     784637716923335095224261902710254454442933591094742482943  bits:  189
5

在Python中,int类型的数字会自动升级为long(大整数)。

18

在这里你可以看到结果被提升为一个长整型

>>> from sys import maxint
>>> type(-maxint)
<type 'int'>
>>> type(-maxint-1)
<type 'int'>
>>> type(-maxint-2)
<type 'long'>
>>> 

请注意,通常对于带符号的数值,负数的数量比正数多一个,所以在这种情况下,-2147483648 仍然是一个整型

撰写回答