Namespaces
Variants

Fixed width integer types (since C99)

From cppreference.net
< c ‎ | types

Содержание

Типы

Определено в заголовочном файле <stdint.h>
int8_t
int16_t
int32_t
int64_t
знаковый целочисленный тип с шириной
точно 8, 16, 32 и 64 бита соответственно
без битов заполнения и использующий дополнительный код для отрицательных значений
(предоставляется только если реализация напрямую поддерживает тип)
int_fast8_t
int_fast16_t
int_fast32_t
int_fast64_t
самый быстрый знаковый целочисленный тип с шириной
не менее 8, 16, 32 и 64 бит соответственно
int_least8_t
int_least16_t
int_least32_t
int_least64_t
наименьший знаковый целочисленный тип с шириной
не менее 8, 16, 32 и 64 бит соответственно
intmax_t целочисленный тип максимальной ширины
intptr_t целочисленный тип, способный хранить указатель
uint8_t
uint16_t
uint32_t
uint64_t
беззнаковый целочисленный тип с шириной
точно 8, 16, 32 и 64 бита соответственно
(предоставляется только если реализация напрямую поддерживает тип)
uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t
самый быстрый беззнаковый целочисленный тип с шириной
не менее 8, 16, 32 и 64 бит соответственно
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t
наименьший беззнаковый целочисленный тип с шириной
не менее 8, 16, 32 и 64 бит соответственно
uintmax_t беззнаковый целочисленный тип максимальной ширины
uintptr_t беззнаковый целочисленный тип, способный хранить указатель

Реализация может определять имена 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 могут быть определены только если реализация поддерживает целочисленный тип такой ширины без заполнения. Таким образом, uint24_t обозначает беззнаковый целочисленный тип с точной шириной 24 бита.

Каждый из перечисленных ниже макросов определён тогда и только тогда, когда реализация определяет соответствующее имя типа. Макросы INT N _C и UINT N _C соответствуют именам типов int_least N _t и uint_least N _t соответственно.

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

Определено в заголовочном файле <stdint.h>
Знаковые целые числа : разрядность
INT8_WIDTH INT16_WIDTH INT32_WIDTH INT64_WIDTH
(C23) (optional)
битовая ширина объекта типа int8_t , int16_t , int32_t , int64_t (точно 8, 16, 32, 64)
(макрос-константа)
INT_FAST8_WIDTH INT_FAST16_WIDTH INT_FAST32_WIDTH INT_FAST64_WIDTH
(C23)
битовая ширина объекта типа int_fast8_t , int_fast16_t , int_fast32_t , int_fast64_t
(макроконстанта)
INT_LEAST8_WIDTH INT_LEAST16_WIDTH INT_LEAST32_WIDTH INT_LEAST64_WIDTH
(C23)
битовая ширина объекта типа int_least8_t , int_least16_t , int_least32_t , int_least64_t
(макрос-константа)
INTPTR_WIDTH
(C23) (optional)
битовая ширина объекта типа intptr_t
(макрос-константа)
INTMAX_WIDTH
(C23)
битовая ширина объекта типа intmax_t
(макрос-константа)
Целочисленные типы со знаком : минимальное значение
INT8_MIN INT16_MIN INT32_MIN INT64_MIN
минимальное значение объекта типа int8_t , int16_t , int32_t , int64_t
(макрос-константа)
INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
минимальное значение объекта типа int_fast8_t , int_fast16_t , int_fast32_t , int_fast64_t
(макрос-константа)
INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
минимальное значение объекта типа int_least8_t , int_least16_t , int_least32_t , int_least64_t
(макрос-константа)
INTPTR_MIN
минимальное значение объекта типа intptr_t
(макрос-константа)
INTMAX_MIN
минимальное значение объекта типа intmax_t
(макрос-константа)
Целочисленные типы со знаком : максимальное значение
INT8_MAX INT16_MAX INT32_MAX INT64_MAX
максимальное значение объекта типа int8_t , int16_t , int32_t , int64_t
(макрос-константа)
INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
максимальное значение объекта типа int_fast8_t , int_fast16_t , int_fast32_t , int_fast64_t
(макрос-константа)
INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
максимальное значение объекта типа int_least8_t , int_least16_t , int_least32_t , int_least64_t
(макрос-константа)
INTPTR_MAX
максимальное значение объекта типа intptr_t
(макрос-константа)
INTMAX_MAX
максимальное значение объекта типа intmax_t
(макроконстанта)
Беззнаковые целые числа : ширина
UINT8_WIDTH UINT16_WIDTH UINT32_WIDTH UINT64_WIDTH
(C23) (опционально)
битовая ширина объекта типа uint8_t , uint16_t , uint32_t , uint64_t (точно 8, 16, 32, 64)
(макроконстанта)
UINT_FAST8_WIDTH UINT_FAST16_WIDTH UINT_FAST32_WIDTH UINT_FAST64_WIDTH
(C23)
битовая ширина объекта типа uint_fast8_t , uint_fast16_t , uint_fast32_t , uint_fast64_t
(макрос-константа)
UINT_LEAST8_WIDTH UINT_LEAST16_WIDTH UINT_LEAST32_WIDTH UINT_LEAST64_WIDTH
(C23)
битовая ширина объекта типа uint_least8_t , uint_least16_t , uint_least32_t , uint_least64_t
(макрос-константа)
UINTPTR_WIDTH
(C23) (optional)
битовая ширина объекта типа uintptr_t
(макро-константа)
UINTMAX_WIDTH
(C23)
битовая ширина объекта типа uintmax_t
(макрос-константа)
Беззнаковые целые числа: максимальное значение
UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
максимальное значение объекта типа uint8_t , uint16_t , uint32_t , uint64_t
(макрос-константа)
UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
максимальное значение объекта типа uint_fast8_t , uint_fast16_t , uint_fast32_t , uint_fast64_t
(макрос-константа)
UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
максимальное значение объекта типа uint_least8_t , uint_least16_t , uint_least32_t , uint_least64_t
(макрос-константа)
UINTPTR_MAX
максимальное значение объекта типа uintptr_t
(макрос-константа)
UINTMAX_MAX
максимальное значение объекта типа uintmax_t
(макрос-константа)

Функциональные макросы для целочисленных констант минимальной ширины

INT8_C INT16_C INT32_C INT64_C
раскрывается в целочисленное константное выражение со значением, заданным аргументом, и типом int_least8_t , int_least16_t , int_least32_t , int_least64_t соответственно
(функциональный макрос)
INTMAX_C
раскрывается в целочисленное константное выражение со значением, заданным аргументом, и типом intmax_t
(функциональный макрос)
UINT8_C UINT16_C UINT32_C UINT64_C
раскрывается в целочисленное константное выражение со значением, заданным аргументом, и типом uint_least8_t , uint_least16_t , uint_least32_t , uint_least64_t соответственно
(функциональный макрос)
UINTMAX_C
раскрывается в целочисленное константное выражение со значением, заданным аргументом, и типом uintmax_t
(функциональный макрос)
#include <stdint.h>
UINT64_C(0x123) // может раскрываться в 0x123ULL или 0x123UL

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

Определено в заголовочном файле <inttypes.h>

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

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

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




[u]int x _t




[u]int_least x _t
[u]int_fast x _t
[u]intmax_t
[u]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

Константы формата для fscanf семейства функций

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

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




[u]int x _t




[u]int_least x _t
[u]int_fast x _t
[u]intmax_t
[u]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++ относительно пробелов перед макросами формата используемыми в этом примере.

#include <inttypes.h>
#include <stdio.h>
int main(void)
{
    printf("%zu\n", sizeof(int64_t));
    printf("%s\n", PRId64);
    printf("%+" PRId64 "\n", INT64_MIN);
    printf("%+" PRId64 "\n", INT64_MAX);
    int64_t n = 7;
    printf("%+" PRId64 "\n", n);
}

Возможный вывод:

8
lld
-9223372036854775808
+9223372036854775807
+7

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.8.1 Макросы для спецификаторов формата (стр.: TBD)
  • 7.18 Целочисленные типы <stdint.h> (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.8.1 Макросы для спецификаторов формата (стр: 158-159)
  • 7.18 Целочисленные типы <stdint.h> (стр: 212-216)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.8.1 Макросы для спецификаторов формата (стр: 217-218)
  • 7.18 Целочисленные типы <stdint.h> (стр: 289-295)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.8.1 Макросы для спецификаторов формата (стр: 198-199)
  • 7.18 Целочисленные типы <stdint.h> (стр: 255-261)

Смотрите также

C++ documentation для Fixed width integer types
C++ documentation для User-defined literals ( formatting macros note )