Fixed width integer types (since C++11)
Содержание |
Типы
|
Определено в заголовочном файле
<cstdint>
|
|
|
int8_t
int16_t
int32_t
int64_t
(опционально)
|
знаковый целочисленный тип с шириной ровно 8, 16, 32 и 64 бита соответственно
без битов заполнения и использующий дополнительный код для отрицательных значений (предоставляется тогда и только тогда, когда реализация напрямую поддерживает тип) (typedef) |
|
int_fast8_t
int_fast16_t
int_fast32_t
int_fast64_t
|
самый быстрый знаковый целочисленный тип с шириной не менее 8, 16, 32 и 64 бит соответственно
(typedef) |
|
int_least8_t
int_least16_t
int_least32_t
int_least64_t
|
наименьший знаковый целочисленный тип с шириной не менее 8, 16, 32 и 64 бит соответственно
(typedef) |
|
intmax_t
|
знаковый целочисленный тип максимальной ширины
(typedef) |
|
intptr_t
(опционально)
|
знаковый целочисленный тип, способный хранить указатель на
void
(typedef) |
|
uint8_t
uint16_t
uint32_t
uint64_t
(опционально)
|
беззнаковый целочисленный тип с шириной ровно 8, 16, 32 и 64 бита соответственно
(предоставляется тогда и только тогда, когда реализация напрямую поддерживает тип) (typedef) |
|
uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t
|
самый быстрый беззнаковый целочисленный тип с шириной не менее 8, 16, 32 и 64 бит соответственно
(typedef) |
|
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t
|
наименьший беззнаковый целочисленный тип с шириной не менее 8, 16, 32 и 64 бит соответственно
(typedef) |
|
uintmax_t
|
беззнаковый целочисленный тип максимальной ширины
(typedef) |
|
uintptr_t
(опционально)
|
беззнаковый целочисленный тип, способный хранить указатель на
void
(typedef) |
Реализация может определять имена typedef
int
N
_t
,
int_fast
N
_t
,
int_least
N
_t
,
uint
N
_t
,
uint_fast
N
_t
и
uint_least
N
_t
, когда
N
не равно 8, 16, 32 или 64. Имена typedef вида
int
N
_t
могут быть определены только если реализация поддерживает целочисленный тип такой ширины без заполнения. Таким образом,
std::uint24_t
обозначает беззнаковый целочисленный тип с точной шириной 24 бита.
Каждый из перечисленных ниже макросов определён тогда и только тогда, когда реализация определяет соответствующее имя типа. Макросы
INT
N
_C
и
UINT
N
_C
соответствуют именам типов
int_least
N
_t
и
uint_least
N
_t
соответственно.
Макроконстанты
|
Определено в заголовке
<cstdint>
|
|
Целые числа со знаком: минимальное значение |
|
|
INT8_MIN
INT16_MIN
INT32_MIN
INT64_MIN
(опционально)
|
минимальное значение
std::int8_t
,
std::int16_t
,
std::int32_t
и
std::int64_t
соответственно
(макроконстанта) |
|
INT_FAST8_MIN
INT_FAST16_MIN
INT_FAST32_MIN
INT_FAST64_MIN
|
минимальное значение
std::int_fast8_t
,
std::int_fast16_t
,
std::int_fast32_t
и
std::int_fast64_t
соответственно
(макроконстанта) |
|
INT_LEAST8_MIN
INT_LEAST16_MIN
INT_LEAST32_MIN
INT_LEAST64_MIN
|
минимальное значение
std::int_least8_t
,
std::int_least16_t
,
std::int_least32_t
и
std::int_least64_t
соответственно
(макроконстанта) |
|
INTPTR_MIN
(опционально)
|
минимальное значение
std::intptr_t
(макроконстанта) |
|
INTMAX_MIN
|
минимальное значение
std::intmax_t
(макроконстанта) |
Целые числа со знаком: максимальное значение |
|
|
INT8_MAX
INT16_MAX
INT32_MAX
INT64_MAX
(опционально)
|
максимальное значение
std::int8_t
,
std::int16_t
,
std::int32_t
и
std::int64_t
соответственно
(макроконстанта) |
|
INT_FAST8_MAX
INT_FAST16_MAX
INT_FAST32_MAX
INT_FAST64_MAX
|
максимальное значение
std::int_fast8_t
,
std::int_fast16_t
,
std::int_fast32_t
и
std::int_fast64_t
соответственно
(макроконстанта) |
|
INT_LEAST8_MAX
INT_LEAST16_MAX
INT_LEAST32_MAX
INT_LEAST64_MAX
|
максимальное значение
std::int_least8_t
,
std::int_least16_t
,
std::int_least32_t
и
std::int_least64_t
соответственно
(макроконстанта) |
|
INTPTR_MAX
(опционально)
|
максимальное значение
std::intptr_t
(макроконстанта) |
|
INTMAX_MAX
|
максимальное значение
std::intmax_t
(макроконстанта) |
Беззнаковые целые числа: максимальное значение |
|
|
UINT8_MAX
UINT16_MAX
UINT32_MAX
UINT64_MAX
(опционально)
|
максимальное значение
std::uint8_t
,
std::uint16_t
,
std::uint32_t
и
std::uint64_t
соответственно
(макроконстанта) |
|
UINT_FAST8_MAX
UINT_FAST16_MAX
UINT_FAST32_MAX
UINT_FAST64_MAX
|
максимальное значение
std::uint_fast8_t
,
std::uint_fast16_t
,
std::uint_fast32_t
и
std::uint_fast64_t
соответственно
(макроконстанта) |
|
UINT_LEAST8_MAX
UINT_LEAST16_MAX
UINT_LEAST32_MAX
UINT_LEAST64_MAX
|
максимальное значение
std::uint_least8_t
,
std::uint_least16_t
,
std::uint_least32_t
и
std::uint_least64_t
соответственно
(макроконстанта) |
|
UINTPTR_MAX
(опционально)
|
максимальное значение
std::uintptr_t
(макроконстанта) |
|
UINTMAX_MAX
|
максимальное значение
std::uintmax_t
(макроконстанта) |
Функциональные макросы для целочисленных констант минимальной ширины
|
INT8_C
INT16_C
INT32_C
INT64_C
|
раскрывается в целочисленное константное выражение с указанным значением и типом, соответствующим
продвинутому
типу
std::int_least8_t
,
std::int_least16_t
,
std::int_least32_t
и
std::int_least64_t
соответственно
(функциональный макрос) |
|
INTMAX_C
|
раскрывается в целочисленное константное выражение с указанным значением и типом
std::intmax_t
(функциональный макрос) |
|
UINT8_C
UINT16_C
UINT32_C
UINT64_C
|
раскрывается в целочисленное константное выражение с указанным значением и типом, соответствующим
продвинутому
типу
std::uint_least8_t
,
std::uint_least16_t
,
std::uint_least32_t
и
std::uint_least64_t
соответственно
(функциональный макрос) |
|
UINTMAX_C
|
раскрывается в целочисленное константное выражение с указанным значением и типом
std::uintmax_t
(функциональный макрос) |
#include <cstdint> UINT64_C(0x123) // раскрывается в литерал типа uint_least64_t со значением 0x123
Макроконстанты формата
|
Определено в заголовочном файле
<cinttypes>
|
Константы форматирования для std::fprintf семейства функций
Каждый из
PRI
макросов, перечисленных здесь, определён тогда и только тогда, когда реализация определяет соответствующее имя типа-псевдонима.
|
Эквивалент
для int или unsigned int |
Описание | Макросы для типов данных | ||||
|---|---|---|---|---|---|---|
std::int
x
_t
|
std::int_least
x
_t
|
std::int_fast
x
_t
|
std::intmax_t
|
std::intptr_t
|
||
d
|
вывод знакового десятичного целого числа | PRId x | PRIdLEAST x | PRIdFAST x | PRIdMAX | PRIdPTR |
i
|
PRIi x | PRIiLEAST x | PRIiFAST x | PRIiMAX | PRIiPTR | |
u
|
вывод беззнакового десятичного целого числа | PRIu x | PRIuLEAST x | PRIuFAST x | PRIuMAX | PRIuPTR |
o
|
вывод беззнакового восьмеричного целого числа | PRIo x | PRIoLEAST x | PRIoFAST x | PRIoMAX | PRIoPTR |
x
|
вывод беззнакового шестнадцатеричного целого числа в нижнем регистре | PRIx x | PRIxLEAST x | PRIxFAST x | PRIxMAX | PRIxPTR |
X
|
вывод беззнакового шестнадцатеричного целого числа в верхнем регистре | PRIX x | PRIXLEAST x | PRIXFAST x | PRIXMAX | PRIXPTR |
Форматные константы для std::fscanf семейства функций
Каждый из макросов
SCN
, перечисленных здесь, определён тогда и только тогда, когда реализация определяет соответствующее имя типа-псевдонима и имеет подходящий
std::fscanf
модификатор длины для типа.
|
Эквивалент
для int или unsigned int |
Описание | Макросы для типов данных | ||||
|---|---|---|---|---|---|---|
std::int
x
_t
|
std::int_least
x
_t
|
std::int_fast
x
_t
|
std::intmax_t
|
std::intptr_t
|
||
d
|
ввод знакового десятичного целочисленного значения | SCNd x | SCNdLEAST x | SCNdFAST x | SCNdMAX | SCNdPTR |
i
|
ввод знакового целочисленного значения | SCNi x | SCNiLEAST x | SCNiFAST x | SCNiMAX | SCNiPTR |
u
|
ввод беззнакового десятичного целочисленного значения | SCNu x | SCNuLEAST x | SCNuFAST x | SCNuMAX | SCNuPTR |
o
|
ввод беззнакового восьмеричного целочисленного значения | SCNo x | SCNoLEAST x | SCNoFAST x | SCNoMAX | SCNoPTR |
x
|
ввод беззнакового шестнадцатеричного целочисленного значения | SCNx x | SCNxLEAST x | SCNxFAST x | 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
может быть
signed
char
, а
std::uint8_t
может быть
unsigned
char
, но ни один из них не может быть
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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| 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 Синопсис заголовка <cinttypes> [cinttypes.syn]
- Стандарт 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
для
Fixed width integer types
|