Namespaces
Variants

Fixed width integer types (since C++11)

From cppreference.net
Utilities library

Содержание

Типы

Определено в заголовочном файле <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