2011-01-03 5 views
63

파이썬에서는 사용할 수있는 최대 정수를 얻을 수있는 방법이 있습니까? INT_MAX와 같은 사전 정의 된 상수가 있습니까?파이썬 정수 범위

답변

114

파이썬에는 임의의 정밀도 정수가 있으므로 실제 고정 된 최대 값은 없습니다. 사용 가능한 메모리가 제한되어 있습니다.

파이썬 2에는 intlong의 두 가지 유형이 있습니다. int은 C 유형을 사용하고 long은 임의의 정밀도입니다. sys.maxint을 사용하면 최대 값은 int입니다.

sys.maxint + 1 

잘 작동하고 long를 반환 : 당신이 보통에 대해 걱정할 필요가 없습니다 그러나 int의 자동 long로 승격된다. intlong가 하나의 임의 정밀도 int 형으로 통합 된 이후

sys.maxint

도, 파이썬 3에 존재하지 않습니다.

+26

파이썬 3 (및 파이썬 2.6 이상)에서는 임의로 큰 값이 필요할 때'sys.maxsize'를 사용할 수 있습니다. – mattdm

+0

길지 않은 것이 있습니까? –

+0

'sys.maxsize'는 파이썬 2와 3 (이론적 인 이유는 메모리가 진짜 제한 요소이기 때문에)에 대한 컨테이너의 크기에 대한 이론적 인 한계가되고 있습니다. –

0
import re 
import sys 
import platform 
import struct 

formats = { 
      "int":{"p_type":"integer", "format":"i"}, 
      "float":{"p_type":"float", "format":"f"}, 
      "double":{"p_type":"float", "format":"d"} 
      }  

sys_bit = int(re.findall(r"\d+", platform.architecture()[0])[0])/8 
for k,v in formats.iteritems(): 
    print "max {0} {1}".format(k, 2**struct.Struct(v["format"]).size*sys_bit-1)-1) 
    print "min {0} {1}".format(k, -2**struct.Struct(v["format"]).size*sys_bit-1))