Целочисленные типы фиксированной ширины (начиная с C++11)
Типы
Для каждого из следующих имён typedef, помеченных как (необязательно), реализация определяет это имя тогда и только тогда, когда она предоставляет соответствующий тип.
Определён в заголовочном файле <cstdint> |
|
|---|---|
|
int8_tint16_tint32_tint64_tintN_t
(необязательно)(необязательно)(необязательно)(необязательно)(необязательно) | знаковый целочисленный тип шириной ровно N бит (обычно 8, 16, 32 или 64), без битов заполнения (typedef) |
|
int_fast8_tint_fast16_tint_fast32_tint_fast64_tint_fastN_t
(необязательно) | самый быстрый знаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (typedef) |
|
int_least8_tint_least16_tint_least32_tint_least64_tint_leastN_t
(необязательно) | наименьший знаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (если определён std::intN_t, std::int_leastN_t обозначает тот же тип) (typedef) |
|
intmax_t | знаковый целочисленный тип максимальной ширины (typedef) |
|
intptr_t
(необязательно до C++29) | знаковый целочисленный тип, способный хранить указатель на void (typedef) |
|
uint8_tuint16_tuint32_tuint64_tuintN_t
(необязательно)(необязательно)(необязательно)(необязательно)(необязательно) | беззнаковый целочисленный тип шириной ровно N бит (обычно 8, 16, 32 или 64), без битов заполнения (typedef) |
|
uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_tuint_fastN_t
(необязательно) | самый быстрый беззнаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (typedef) |
|
uint_least8_tuint_least16_tuint_least32_tuint_least64_tuint_leastN_t
(необязательно) | наименьший беззнаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (если определён std::uintN_t, std::uint_leastN_t обозначает тот же тип) (typedef) |
|
uintmax_t | беззнаковый целочисленный тип максимальной ширины (typedef) |
|
uintptr_t
(необязательно до C++29) | беззнаковый целочисленный тип, способный хранить указатель на void (typedef) |
Макроконстанты
Для каждого из следующих макросов, помеченных как (присутствует при определённых условиях), реализация определяет этот макрос тогда и только тогда, когда она определяет соответствующее имя typedef.
Определён в заголовочном файле <cstdint> |
|
|---|---|
Знаковые целые числа: ширина в битах |
|
|
INTN_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::intN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INT_FASTN_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::int_fastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INT_LEASTN_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::int_leastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INTMAX_WIDTH
(C++26) | ширина в битах типа std::intmax_t (макроконстанта) |
|
INTPTR_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::intptr_t (макроконстанта) |
Знаковые целые числа: минимальное значение |
|
|
INTN_MIN
(присутствует при определённых условиях) | минимальное значение типа std::intN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INT_FASTN_MIN
(присутствует при определённых условиях) | минимальное значение типа std::int_fastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INT_LEASTN_MIN
(присутствует при определённых условиях) | минимальное значение типа std::int_leastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INTMAX_MIN | минимальное значение типа std::intmax_t (макроконстанта) |
|
INTPTR_MIN
(присутствует при определённых условиях) | минимальное значение типа std::intptr_t (макроконстанта) |
Знаковые целые числа: максимальное значение |
|
|
INTN_MAX
(присутствует при определённых условиях) | максимальное значение типа std::intN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INT_FASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа std::int_fastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INT_LEASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа std::int_leastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
INTMAX_MAX | максимальное значение типа std::intmax_t (макроконстанта) |
|
INTPTR_MAX
(присутствует при определённых условиях) | максимальное значение типа std::intptr_t (макроконстанта) |
Беззнаковые целые числа: ширина в битах |
|
|
UINTN_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::uintN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
UINT_FASTN_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::uint_fastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
UINT_LEASTN_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::uint_leastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
UINTMAX_WIDTH
(C++26) | ширина в битах типа std::uintmax_t (макроконстанта) |
|
UINTPTR_WIDTH
(C++26)(присутствует при определённых условиях) | ширина в битах типа std::uintptr_t (макроконстанта) |
Беззнаковые целые числа: максимальное значение |
|
|
UINTN_MAX
(присутствует при определённых условиях) | максимальное значение типа std::uintN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
UINT_FASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа std::uint_fastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
UINT_LEASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа std::uint_leastN_t (N обычно равно 8, 16, 32 или 64) (макроконстанта) |
|
UINTMAX_MAX | максимальное значение типа std::uintmax_t (макроконстанта) |
|
UINTPTR_MAX
(присутствует при определённых условиях) | максимальное значение типа std::uintptr_t (макроконстанта) |
Функциональные макросы
Для каждого из следующих макросов, помеченных как (присутствует при определённых условиях), реализация определяет этот макрос тогда и только тогда, когда она определяет соответствующее имя typedef.
Определён в заголовочном файле <cstdint> |
|
|---|---|
|
INTN_C
(присутствует при определённых условиях) | раскрывается в целочисленное константное выражение типа std::int_leastN_t; его значение задаётся аргументом (функциональный макрос) |
|
INTMAX_C | раскрывается в целочисленное константное выражение типа std::intmax_t; его значение задаётся аргументом (функциональный макрос) |
|
UINTN_C
(присутствует при определённых условиях) | раскрывается в целочисленное константное выражение типа std::uint_leastN_t; его значение задаётся аргументом (функциональный макрос) |
|
UINTMAX_C | раскрывается в целочисленное константное выражение типа std::uintmax_t; его значение задаётся аргументом (функциональный макрос) |
#include <cstdint> UINT64_C(0x123) // expands to a literal of type uint_least64_t and value 0x123
Макроконстанты форматирования
Определён в заголовочном файле <cinttypes> |
|---|
Константы форматирования для семейства функций std::fprintf
Каждый из перечисленных здесь макросов PRI определён тогда и только тогда, когда реализация определяет соответствующее имя typedef.
| Эквивалент для int или unsignedint | Описание | Макросы для типов данных | ||||
|---|---|---|---|---|---|---|
std::intx_t
|
std::int_leastx_t
|
std::int_fastx_t
|
std::intmax_t |
std::intptr_t |
||
d | вывод десятичного значения знакового целого числа | PRIdx | PRIdLEASTx | PRIdFASTx | PRIdMAX | PRIdPTR |
i | PRIix | PRIiLEASTx | PRIiFASTx | PRIiMAX | PRIiPTR | |
u | вывод десятичного значения беззнакового целого числа | PRIux | PRIuLEASTx | PRIuFASTx | PRIuMAX | PRIuPTR |
o | вывод восьмеричного значения беззнакового целого числа | PRIox | PRIoLEASTx | PRIoFASTx | PRIoMAX | PRIoPTR |
x | вывод шестнадцатеричного значения беззнакового целого числа строчными буквами | PRIxx | PRIxLEASTx | PRIxFASTx | PRIxMAX | PRIxPTR |
X | вывод шестнадцатеричного значения беззнакового целого числа прописными буквами | PRIXx | PRIXLEASTx | PRIXFASTx | PRIXMAX | PRIXPTR |
Константы форматирования для семейства функций std::fscanf
Каждый из перечисленных здесь макросов SCN определён тогда и только тогда, когда реализация определяет соответствующее имя typedef и имеет подходящий модификатор длины std::fscanf для этого типа.
| Эквивалент для int или unsignedint | Описание | Макросы для типов данных | ||||
|---|---|---|---|---|---|---|
std::intx_t
|
std::int_leastx_t
|
std::int_fastx_t
|
std::intmax_t |
std::intptr_t |
||
d | ввод десятичного значения знакового целого числа | SCNdx | SCNdLEASTx | SCNdFASTx | SCNdMAX | SCNdPTR |
i | ввод значения знакового целого числа | SCNix | SCNiLEASTx | SCNiFASTx | SCNiMAX | SCNiPTR |
u | ввод десятичного значения беззнакового целого числа | SCNux | SCNuLEASTx | SCNuFASTx | SCNuMAX | SCNuPTR |
o | ввод восьмеричного значения беззнакового целого числа | SCNox | SCNoLEASTx | SCNoFASTx | SCNoMAX | SCNoPTR |
x | ввод шестнадцатеричного значения беззнакового целого числа | SCNxx | SCNxLEASTx | SCNxFASTx | SCNxMAX | SCNxPTR |
Примечания
Поскольку C++ интерпретирует символ, непосредственно следующий за строковым литералом, как пользовательский строковый литерал, код C, например printf("%"PRId64"\n",n);, недопустим в C++ и требует пробела перед PRId64.
Стандарт C99 рекомендует реализациям C++ не определять приведённые выше макросы пределов, констант и форматов, если только макросы __STDC_LIMIT_MACROS, __STDC_CONSTANT_MACROS или __STDC_FORMAT_MACROS (соответственно) не определены до включения соответствующего заголовочного файла C (stdint.h или inttypes.h). Эта рекомендация не была принята ни одним стандартом C++ и была удалена в C11. Однако некоторые реализации (например, glibc 2.17) пытаются применять это правило, поэтому может потребоваться определить макросы __STDC; компиляторы C++ в некоторых случаях могут пытаться обойти это ограничение, определяя их автоматически.
std::int8_t может быть signedchar, а std::uint8_t может быть unsignedchar, но ни один из них не может быть char независимо от его знаковости (поскольку char не считается ни «знаковым целочисленным типом», ни «беззнаковым целочисленным типом»).
Пример
См. также примечание о пробелах перед макросами форматирования, используемыми в этом примере.
#include <cinttypes>
#include <cstdio>
int main()
{
std::printf("%zu\n", sizeof(std::int64_t));
std::printf("%s\n", PRId64);
std::printf("%+" PRId64 "\n", INT64_MIN);
std::printf("%+" PRId64 "\n", INT64_MAX);
std::int64_t n = 7;
std::printf("%+" PRId64 "\n", n);
}
Возможный вывод:
8 lld -9223372036854775808 +9223372036854775807 +7
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 2820 | C++11 | требования к необязательным именам typedef и макросам не соответствовали C | приведены в соответствие |
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2024):
- 17.4.1 Обзор заголовочного файла <cstdint> [cstdint.syn]
- 31.13.2 Обзор заголовочного файла <cinttypes> [cinttypes.syn]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 17.4 Целочисленные типы [cstdint]
- 29.12.2 Обзор заголовочного файла <cinttypes> [cinttypes.syn]
- Стандарт C++17 (ISO/IEC 14882:2017):
- 21.4 Целочисленные типы [cstdint]
- 30.11.2 Файлы библиотеки C [c.files]
- Стандарт C++14 (ISO/IEC 14882:2014):
- 18.4 Целочисленные типы [cstdint]
- 27.9.2 Файлы библиотеки C [c.files]
- Стандарт C++11 (ISO/IEC 14882:2011):
- 18.4 Целочисленные типы [cstdint]
- 27.9.2 Файлы библиотеки C [c.files]
См. также
| Документация по C для целочисленных типов фиксированной ширины |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/integer