Максимальное и минимальное значение int в Python
В этой статье мы рассмотрим, как получить максимальное и минимальное целочисленное значение (int) в Python. Мы разберем, в чем смысл этих значений и как их получить в версии Python до и после 3.0.
Короткая справка для тех, кому лень читать всю статью
В 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 ") print(f"The minimum integer value is ")
Обратите внимание, что Python 3.0+ не ограничивает тип данных int , и в нем нет максимального/минимального значения. Но чтобы получить практическое максимальное целочисленное значение для отдельного целочисленного слова в вашей операционной системе, используйте sys.maxsize , как показано выше.
А теперь давайте разберем эту тему с самого начала.
Экстремум целочисленного значения
Память компьютера ограничена. Типичная операционная система использует 32-битную или 64-битную систему представления чисел. Это означает, что система может представить 2³² или 2⁶⁴ чисел.
Обратите внимание, что ограничение максимального и минимального размера целого числа не является особенностью Python. Оно зависит от возможностей устройства, а не от языка программирования.
Давайте рассмотрим подробнее, что вообще ограничивает размер целого числа.
Почему для целых чисел существует максимум/минимум?
Максимальное целое число – это максимальное число, которое может храниться в двоичном хранилище. Многие операционные системы используют 32 бита для хранения данных. Это означает, что любое число, которое вы хотите использовать, должно поместиться в эти 32 бита.
Бит может иметь значение либо 0, либо 1. Если составить строку из этих битов, то можно получить множество различных комбинаций 0 и 1.
Например, если у вас есть 2 бита, у вас есть 2² = 4 возможных комбинации:
А для 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 ")
Минимальное значение 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 ")
Тип 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 "", line 1, in IndexError: cannot fit 'int' into an index-sized integer
Сообщение об ошибке говорит о том, что целочисленный индекс, который вы используете для доступа к элементам списка, слишком велик, чтобы быть индексом. Это происходит из-за ограничений вашей операционной системы. Индекс Python все равно должен быть целым числом, ограниченным 32-битными или 64-битными пределами.
Таким образом, хотя int не ограничен в Python, операционная система все равно использует 32 или 64 бита для представления чисел.
Спасибо за внимание. Успешного кодинга!