Только для систем Майкрософт
Ограничения для целочисленных типов представлены в следующей таблице. Макросы препроцессора для этих ограничений также определяются при включении стандартных интерфейсов файла <заголовков>.
Константа | Значение | Значение |
---|---|---|
CHAR_BIT | Количество битов в наименьшей переменной, которая не является битовым полем. | 8 |
SCHAR_MIN | Минимальное значение для переменной типа signed char . | –128 |
SCHAR_MAX | Максимальное значение для переменной типа signed char . | 127 |
UCHAR_MAX | Максимальное значение для переменной типа unsigned char . | 255 (0xff) |
CHAR_MIN | Минимальное значение для переменной типа char . | -128; 0, если /J используется параметр |
CHAR_MAX | Максимальное значение для переменной типа char . | 127; 255, если /J используется параметр |
MB_LEN_MAX | Максимальное количество байтов в многосимвольной константе. | 5 |
SHRT_MIN | Минимальное значение для переменной типа short . | -32768 |
SHRT_MAX | Максимальное значение для переменной типа short . | 32767 |
USHRT_MAX | Максимальное значение для переменной типа unsigned short . | |
INT_MIN | Минимальное значение для переменной типа int . | -2147483648 |
INT_MAX | Максимальное значение для переменной типа int . | 2147483647 |
UINT_MAX | Максимальное значение для переменной типа unsigned int . | 4 294 967 295 (0xffffffff) |
LONG_MIN | Минимальное значение для переменной типа long . | -2147483648 |
LONG_MAX | Максимальное значение для переменной типа long . | 2147483647 |
ULONG_MAX | Максимальное значение для переменной типа unsigned long . | 4 294 967 295 (0xffffffff) |
LLONG_MIN | Минимальное значение для переменной типа long long | -9223372036854775808 |
LLONG_MAX | Максимальное значение для переменной типа long long | 9223372036854775807 |
ULLONG_MAX | Максимальное значение для переменной типа unsigned long long | 18446744073709551615 (0xffffffffffffffff) |
Если значение превышает максимально возможное представление целочисленного типа, компилятор Microsoft выдает ошибку.
Плавающие ограничения
Специально для Microsoft
Ограничения для целочисленных типов в C и C++ перечислены в следующей таблице. Эти ограничения определены в заголовочном файле стандарта C 9.0021 <лимиты.h> . Заголовок стандартной библиотеки C++
включает
, который включает
.
Microsoft C также позволяет объявлять целочисленные переменные размера, которые представляют собой целочисленные типы размера 8, 16, 32 или 64 бита. Дополнительные сведения о целочисленных размерах в C см. в разделе Целочисленные типы с размерами.
Константа | Значение | Значение |
---|---|---|
CHAR_BIT | Количество битов в наименьшей переменной, которая не является битовым полем. | 8 |
ШАР_МИН | Минимальное значение для переменной типа signed char . | -128 |
SCHAR_MAX | Максимальное значение для переменной типа signed char . | 127 |
УЧАР_МАКС | Максимальное значение для переменной типа unsigned char . | 255 (0xff) |
СИМВОЛ_МИН | Минимальное значение переменной типа char . | -128; 0, если используется параметр /J |
СИМВ_МАКС | Максимальное значение переменной типа char . | 127; 255, если используется опция /J |
МБ_LEN_МАКС | Максимальное количество байтов в многосимвольной константе. | 5 |
SHRT_MIN | Минимальное значение для переменной типа короткая . | -32768 |
SHRT_MAX | Максимальное значение для переменной типа короткая . | 32767 |
USHRT_MAX | Максимальное значение для переменной типа unsigned short . | 65535 (0xffff) |
INT_MIN | Минимальное значение для переменной типа int . | -2147483647 — 1 |
INT_MAX | Максимальное значение переменной типа int . | 2147483647 |
UINT_MAX | Максимальное значение для переменной типа целое число без знака . | 4294967295 (0xffffffff) |
LONG_MIN | Минимальное значение переменной типа long . | -2147483647 — 1 |
LONG_MAX | Максимальное значение переменной типа long . | 2147483647 |
ULONG_MAX | Максимальное значение переменной типа unsigned long . | 4294967295 (0xffffffff) |
LLONG_MIN | Минимальное значение переменной типа long long . | -9 223 372 036 854 775 807 — 1 |
LLONG_MAX | Максимальное значение переменной типа long long . | 9 223 372 036 854 775 807 |
ULLONG_MAX | Максимальное значение переменной типа unsigned long long . | 18 446 744 073 709 551 615 (0xffffffffffffffff) |
Если значение превышает максимальное целочисленное представление, компилятор Microsoft выдает ошибку.
END Специально для Microsoft
Целочисленные константы C
Просмотреть все отзывы о странице
спросил
Изменено 28 дней назад
Просмотрено 1,8 млн раз
Как представить минимальное и максимальное значения для целых чисел в Python? В Java у нас есть Integer. MIN_VALUE
и Integer.MAX_VALUE
.
См. также: Каково максимальное число с плавающей запятой в Python?.
В Python 3 этот вопрос не применяется. Простой тип int
неограничен.
Однако на самом деле вы можете искать информацию о текущем размере слова интерпретатора , который в большинстве случаев будет таким же, как размер слова машины. Эта информация по-прежнему доступна в Python 3 как sys.maxsize
, что является максимальным значением, которое может быть представлено словом со знаком. Соответственно, это размер максимально возможного списка или последовательности в памяти.
Как правило, максимальное значение, представляемое словом без знака, равно sys.maxsize * 2 + 1
, а количество бит в слове будет math.log2(sys.maxsize * 2 + 2)
. Смотрите этот ответ для получения дополнительной информации.
В Python 2 максимальное значение для простых значений int
доступно как sys.maxint
:
>>> sys.maxint # в моей системе, 2**63-1 9223372036854775807
Вы можете рассчитать минимальное значение с помощью -sys.maxint - 1
, как показано в документации.
Python плавно переключается с простых целых чисел на длинные, как только вы превысите это значение. Так что в большинстве случаев вам не нужно будет это знать.
21Если вам просто нужно число, которое больше всех остальных, вы можете использовать
float('inf')
аналогичным образом, число меньше, чем все остальные:
float('-inf')
Это работает как в Python 2, так и в 3.
8 Константа sys.maxint
была удалена из Python 3.0 и более поздних версий, вместо этого используйте sys.maxsize
.
2Целые числа
- PEP 237 : По сути,
long
переименован вint
. То есть имеется только один встроенный целочисленный тип с именемint
; но он ведет себя в основном как старый типlong
.…
- Константа
sys.maxint
была удалена, так как больше нет ограничения на значение целых чисел. Однакоsys.maxsize
можно использовать как целое число, большее, чем любой практичный список или строковый индекс. Он соответствует «естественному» целочисленному размеру реализации и обычно равен 9.0021 sys.maxint в предыдущих выпусках на той же платформе (при тех же параметрах сборки).
Для Python 3 не существует максимального или минимального значения для типа int
.
Вместо этого вас может заинтересовать sys.maxsize
. Согласно документации:
sys. maxsize
Целое число, дающее максимальное значение переменной типа
Py_ssize_t
может брать. Обычно это2**31 - 1
на 32-разрядной платформе и2**63 - 1
на 64-битная платформа.
система импорта max_size = sys.maxsize минимальный_размер = -sys.maxsize - 19
В Python 2 целые числа будут автоматически переключаться с представления фиксированного размера int
на представление переменной ширины long
, как только вы передадите значение sys.maxint
, которое равно 2 31 — 1 или 2 63 — 1 в зависимости от вашей платформы. Обратите внимание на добавленный здесь L
:
>>> 9223372036854775807 9223372036854775807 >>> 9223372036854775808 9223372036854775808Л
Из руководства по Python 2.7:
Числа создаются числовыми литералами или в результате встроенных функций и операторов. Целочисленные литералы без прикрас (включая двоичные, шестнадцатеричные и восьмеричные числа) дают простые целые числа, если только значение, которое они обозначают, не слишком велико, чтобы быть представленным как простое целое число, и в этом случае они дают длинное целое число. Целочисленные литералы с 9Суффикс 0021 ‘L’ или
'l'
дает длинные целые числа (предпочтительнее'L'
, потому что1l
слишком похоже на одиннадцать!).
Python очень старается притвориться, что его целые числа являются математическими целыми числами и не ограничены. Он может, например, легко вычислить гугол:
>>> 10**100 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 л4
Вы можете использовать ‘inf’ следующим образом:
импортировать математику bool_true = 0 < math.inf bool_false = 0 < -math.inf
См.: math — Математические функции
2 Если вам нужен максимум для индексов массива или списка (эквивалент size_t
в C/C++), вы можете использовать numpy:
np. iinfo(np.intp).max
Это то же самое, что и sys.maxsize
, однако преимущество в том, что вам не нужен import sys только для этого.
Если вы хотите макс. для собственного int на машине:
np.iinfo(np.intc).max
Другие доступные типы можно посмотреть в док.
Для чисел с плавающей запятой вы также можете использовать sys.float_info.max
.
sys.maxsize
на самом деле не является максимальным поддерживаемым целочисленным значением. Вы можете удвоить maxsize и умножить его на себя, и оно останется действительным и правильным значением.
Однако, если вы попробуете sys.maxsize ** sys.maxsize
, это приведет к зависанию вашей машины на значительное время. Как многие указывали, размер в байтах и битах не имеет значения, потому что его практически не существует. Я предполагаю, что python просто счастливо расширяет свои целые числа, когда ему нужно больше места в памяти. Так что в общем-то нет предела.
Теперь, если вы говорите об упаковке или хранении целых чисел безопасным способом, чтобы впоследствии их можно было извлечь с целостностью, то, конечно, это уместно. Я действительно не уверен в упаковке, но я знаю Python 9Модуль 0021 pickle хорошо справляется с этими задачами. Строковые представления, очевидно, не имеют практических ограничений.
Суть в следующем: каков ваш лимит приложений? Что требуется для числовых данных? Используйте этот предел вместо практически несуществующего целочисленного предела Python.
Я очень полагаюсь на подобные команды.
python -c 'импорт системы; печать (sys.maxsize)'
Максимальное число возвращено: 9223372036854775807
Для получения дополнительных ссылок на «sys» вы должны получить доступ
https://docs.python.org/3/library/sys.html
https://docs.python.org/3/library/sys.html#sys.maxsize
1В CPython 3. 11 в 64-разрядной системе максимальное и минимальное целые числа равны
2 ** ((2 ** 63 - 1) * 30) - 1 -(2**(2**63*30)-1)
, потому что целые числа Python реализованы как массив 30-битных целых чисел, хранящих абсолютное значение целого числа, а 64-битное целое число в дополнении до двух со знаком хранит длину этого массива, а также знак целого числа Python, поэтому отрицательное целое число имеет отрицательный «размер».
Вам понадобится 35 экзабайт памяти, чтобы создать его, что при сегодняшних (апрель 2023 года) ценах в 65 долларов за 32 ГБ на NewEgg будет стоить 70 миллиардов долларов. С практической точки зрения, максимальное целое число Python ограничено объемом памяти на вашем компьютере.
CPython 3.11 хранит целые числа следующим образом (я упростил реальный код, убрав все макросы):
struct PyLongObject { Py_ssize_t ob_refcnt; PyTypeObject* ob_type; Py_ssize_t ob_size; /* Количество элементов в переменной части */ uint32_t ob_digit[1]; };
Таким образом, в 64-битной системе он хранит массив 32-битных целых чисел и использует Py_ssize_t
, 64-битное целое число со знаком (по сути, 63-битный ingeter) для хранения длины этого массива.