Python中最小负值
我认为在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
仍然是一个整型