Максимальное и минимальное значение int в Python

В этой статье мы рассмотрим, как получить максимальное и минимальное целочисленное значение (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. Оно зависит от возможностей устройства, а не от языка программирования.

Давайте рассмотрим подробнее, что вообще ограничивает размер целого числа.

Почему для целых чисел существует максимум/минимум?

Максимальное и минимальное значение int в двоичной форме в 32-битной системе. Знаки, представленные 0 и 1, обведены кружочками.

Максимальное целое число – это максимальное число, которое может храниться в двоичном хранилище. Многие операционные системы используют 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)”.