В этой статье мы рассмотрим, как получить максимальное и минимальное целочисленное значение (int) в Python. Мы разберем, в чем смысл этих значений и как их получить в версии Python до и после 3.0.
Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU
Короткая справка для тех, кому лень читать всю статью
В Python для получения максимального и минимального целочисленных значений можно использовать sys.maxsize
из модуля sys
.
sys.maxsize
дает максимальное целочисленное значение, а его отрицательная версия -sys.maxsize - 1
– минимальное.
import sys # Get the maximum integer value max_int = sys.maxsize # Get the minimum integer value min_int = -sys.maxsize - 1 # Print the values print(f"The maximum integer value is {max_int}") print(f"The minimum integer value is {min_int}")
Обратите внимание, что Python 3.0+ не ограничивает тип данных int
, и в нем нет максимального/минимального значения. Но чтобы получить практическое максимальное целочисленное значение для отдельного целочисленного слова в вашей операционной системе, используйте sys.maxsize
, как показано выше.
А теперь давайте разберем эту тему с самого начала.
Экстремум целочисленного значения
Память компьютера ограничена. Типичная операционная система использует 32-битную или 64-битную систему представления чисел. Это означает, что система может представить 2³²
или 2⁶⁴
чисел.
Обратите внимание, что ограничение максимального и минимального размера целого числа не является особенностью Python. Оно зависит от возможностей устройства, а не от языка программирования.
Давайте рассмотрим подробнее, что вообще ограничивает размер целого числа.
Почему для целых чисел существует максимум/минимум?
Максимальное целое число – это максимальное число, которое может храниться в двоичном хранилище. Многие операционные системы используют 32 бита для хранения данных. Это означает, что любое число, которое вы хотите использовать, должно поместиться в эти 32 бита.
Бит может иметь значение либо 0, либо 1. Если составить строку из этих битов, то можно получить множество различных комбинаций 0 и 1.
Например, если у вас есть 2 бита, у вас есть 2² = 4
возможных комбинации:
- 00
- 01
- 10
- 11
А для N битов у вас есть 2^N возможных комбинаций.
Компьютер, использующий 32 бита для представления чисел, имеет общее количество возможных комбинаций 2³² = 4 294 967 296
. Это означает, что компьютер может представлять 2³²
чисел так, что каждая комбинация битов соответствует числу в десятичной системе счисления.
Как вы знаете, существуют не только положительные числа, но и отрицательные, и ноль. Но биты не понимают отрицательных знаков. Вместо этого компьютер может использовать 1 как отрицательный знак, а 0 – как положительный.
В 32-битной последовательности это означает, что знак обозначается крайним левым битом (1 для отрицательных, 0 для положительных значений). Поскольку один бит используется в качестве знака, для представления собственно чисел остается 31 бит.
Это означает, что самое большое целое число в 32-битной системе – это 0, за которым следует 31 единица. Другими словами, 2³⁰ + 2²⁹ + … + 2² + 2¹ + 2⁰
. Это 2³¹ - 1
или 2 147 483 647
. Таким образом, используя этот тип 32-битной системы знаковых целых чисел, можно считать от 0 до 2 147 483 647
.
Когда дело доходит до отрицательных значений, идея точно такая же. Наименьшее отрицательное значение – это единица, за которой следует 31 единица, то есть 2³⁰ + 2²⁹ + … + 2² + 2¹ + 2⁰
. В отрицательном значении это -2 147 483 647
.
Но помните, что поскольку значение 0 уже включено в диапазон положительных чисел, мы начинаем отсчет отрицательных значений с -1, а не с 0. Это означает, что наименьшее возможное отрицательное значение в 32-битной системе знаковых целых чисел на самом деле на единицу меньше, чем -2 147 483 647
, то есть -2 147 483 648
.
Если компьютер использует 64 бита для хранения чисел, то идея та же.
Максимальное значение 64-битного знакового целого числа – 2⁶³ - 1 = 9 223 372 036 854 775 807
, а минимальное значение – -(2⁶³ - 1) - 1 = -9 223 372 036 854 775 808
.
Подводя итог, можно сказать, что максимальные и минимальные значения целых чисел в языках программирования определяются объемом памяти, выделенной для их хранения, и типом используемого целого числа. Эти значения важны, поскольку они определяют диапазон значений, которые может хранить целочисленная переменная, и могут влиять на точность и аккуратность вычислений с целыми числами.
Максимальное значение int в Python
Чтобы получить максимальное значение целочисленного типа данных, используйте sys.maxsize
.
import sys # Get the max integer value max_int = sys.maxsize print(f"The maximum integer value is {max_int}")
Минимальное значение int в Python
Чтобы получить минимальное значение целочисленного типа данных, используйте отрицательное значение sys.maxsize
и вычтите из него 1. Единица вычитается, чтобы учесть, что 0 находится в диапазоне положительных значений.
import sys # Get the min integer value min_int = -sys.maxsize - 1 print(f"The minimum integer value is {min_int}")
Тип int в Python 3+ не имеет ограничений!
Начиная с Python 3, тип int
является несвязанным. Это означает, что с помощью типа int
можно представить сколь угодно большое число, ограничений нет.
В версиях Python до 3.0 тип int
был привязан к диапазону [-2⁶³, 2⁶³ - 1]
. Если вы хотели использовать число, выходящее за рамки этого диапазона, вам пришлось бы использовать тип данных long
. На самом деле, преобразование из int
в long
происходит автоматически.
В качестве примера попробуем напечатать несколько больших чисел в Python 2, где тип int
еще ограничен:
print(9223372036854775807) print(9223372036854775808)
Вывод:
9223372036854775807 9223372036854775808L
Обратите внимание на “L” в конце второго числа. Поскольку 9223372036854775808
больше максимального значения int
, оно автоматически превратилось в значение long
, которое Python обозначает добавлением “L” в конце.
Но в Python 3 тип int
является неограниченным. По сути, то, что было long
в Python 2, стало int
в Python 3+. Кроме того, буква “L” больше не добавляется в конец больших целых чисел!
Давайте повторим предыдущий пример в Python 3:
print(9223372036854775807) print(9223372036854775808)
Вывод:
9223372036854775807 9223372036854775808
Хотя в Python нет ограничений на то, насколько большим может быть целое число, sys.maxsize
дает вам верхнюю границу для практических списков или строк.
Максимальное значение работает как сигнальная метка в алгоритмах. Поэтому, хотя оно и не является жестким лимитом для целых чисел в Python, оно указывает на максимальный размер слова, используемый для представления целых чисел.
Для лучшего понимания приведем пример. Посмотрим, что произойдет, если попытаться использовать целое число, превышающее sys.maxsize
, для доступа к элементу списка:
l = [1,2,3,4,5,6] value = l[10000000000000000000000000000000000]
Вывод:
Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: cannot fit 'int' into an index-sized integer
Сообщение об ошибке говорит о том, что целочисленный индекс, который вы используете для доступа к элементам списка, слишком велик, чтобы быть индексом. Это происходит из-за ограничений вашей операционной системы. Индекс Python все равно должен быть целым числом, ограниченным 32-битными или 64-битными пределами.
Таким образом, хотя int
не ограничен в Python, операционная система все равно использует 32 или 64 бита для представления чисел.
Спасибо за внимание. Успешного кодинга!
Перевод статьи Artturi Jalli “Python Maximum/Minimum Integer Value (with Examples)”.