Spec-Zone.ru › C++

Целочисленные типы с фиксированной шириной (с C++11)

Типы

Определено в заголовке <cstdint>
int8_tint16_tint32_tint64_t
(необязательно)
целочисленный тип со знаком с шириной ровно 8, 16, 32 и 64 бита соответственно
без битов заполнения и использованием дополнительного кода для отрицательных значений
(предоставляется только в том случае, если реализация напрямую поддерживает тип)
(typedef)
int_fast8_tint_fast16_tint_fast32_tint_fast64_t
самый быстрый целочисленный тип со знаком с шириной не менее 8, 16, 32 и 64 битов соответственно
(typedef)
int_least8_tint_least16_tint_least32_tint_least64_t
самый маленький целочисленный тип со знаком с шириной не менее 8, 16, 32 и 64 битов соответственно
(typedef)
intmax_t
целочисленный тип со знаком максимальной ширины
(typedef)
intptr_t
(необязательно)
целочисленный тип со знаком, способный хранить указатель на void
(typedef)
uint8_tuint16_tuint32_tuint64_t
(необязательно)
целочисленный тип без знака с шириной ровно 8, 16, 32 и 64 бита соответственно
(предоставляется только в том случае, если реализация напрямую поддерживает тип)
(typedef)
uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_t
самый быстрый целочисленный тип без знака с шириной не менее 8, 16, 32 и 64 битов соответственно
(typedef)
uint_least8_tuint_least16_tuint_least32_tuint_least64_t
самый меньший целочисленный тип без знака с шириной не менее 8, 16, 32 и 64 битов соответственно
(typedef)
uintmax_t
целочисленный тип без знака максимальной ширины
(typedef)
uintptr_t
(необязательно)
целочисленный тип без знака, способный хранить указатель на void
(typedef)

Реализация может определить имена typedef intN_t, int_fastN_t, int_leastN_t, uintN_t, uint_fastN_t, и uint_leastN_t, когда N не равно 8, 16, 32 или 64. Имена typedef вида intN_t могут быть определены только в том случае, если реализация поддерживает целочисленный тип этой ширины без заполнения. Таким образом, std::uint24_t обозначает целочисленный тип без знака с шириной ровно 24 бита.

Каждый из перечисленных макросов определен тогда и только тогда, когда реализация определяет соответствующее имя typedef. Макросы INTN_C и UINTN_C соответствуют именам typedef int_leastN_t и uint_leastN_t, соответственно.

Макроконстанты

Определено в заголовке <cstdint>
Целочисленные типы со знаком: минимальное значение
INT8_MININT16_MININT32_MININT64_MIN
(необязательно)
минимальное значение std::int8_t, std::int16_t, std::int32_t и std::int64_t соответственно
(макроконстанта)
INT_FAST8_MININT_FAST16_MININT_FAST32_MININT_FAST64_MIN
минимальное значение std::int_fast8_t, std::int_fast16_t, std::int_fast32_t и std::int_fast64_t соответственно
(макроконстанта)
INT_LEAST8_MININT_LEAST16_MININT_LEAST32_MININT_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_MAXINT16_MAXINT32_MAXINT64_MAX
(необязательно)
максимальное значение std::int8_t, std::int16_t, std::int32_t и std::int64_t соответственно
(макроконстанта)
INT_FAST8_MAXINT_FAST16_MAXINT_FAST32_MAXINT_FAST64_MAX
максимальное значение std::int_fast8_t, std::int_fast16_t, std::int_fast32_t и std::int_fast64_t соответственно
(макроконстанта)
INT_LEAST8_MAXINT_LEAST16_MAXINT_LEAST32_MAXINT_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_MAXUINT16_MAXUINT32_MAXUINT64_MAX
(необязательно)
максимальное значение std::uint8_t, std::uint16_t, std::uint32_t и std::uint64_t соответственно
(макроконстанта)
UINT_FAST8_MAXUINT_FAST16_MAXUINT_FAST32_MAXUINT_FAST64_MAX
максимальное значение std::uint_fast8_t, std::uint_fast16_t, std::uint_fast32_t и std::uint_fast64_t соответственно
(макроконстанта)
UINT_LEAST8_MAXUINT_LEAST16_MAXUINT_LEAST32_MAXUINT_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_CINT16_CINT32_CINT64_C
расширяется до целочисленного выражения константы, имеющего значение, указанное его аргументом, и тип которого является продвинутым типом std::int_least8_t, std::int_least16_t, std::int_least32_t и std::int_least64_t соответственно
(функциональный макрос)
INTMAX_C
расширяется до целочисленного выражения константы, имеющего значение, указанное его аргументом, и тип std::intmax_t
(функциональный макрос)
UINT8_CUINT16_CUINT32_CUINT64_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) // expands to a literal of type uint_least64_t and value 0x123

Форматные макроконстанты

Определено в заголовке <cinttypes>

Форматные константы для семейства функций std::fprintf

Каждый из перечисленных здесь макросов PRI определен тогда и только тогда, когда реализация определяет соответствующее имя typedef.

Эквивалент
для int или
unsigned int
Описание Макросы для типов данных




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 или
unsigned int
Описание Макросы для типов данных




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 может быть 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 Применимо к Поведение, опубликованное Правильное поведение
LWG 2820 C++11 требования к необязательным именам typedef и макросам были несогласованы с C согласованы

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2023):
    • 17.4 Целые типы [cstdint]
    • 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 документация по Типы целых чисел с фиксированной шириной

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/integer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API