Spec-Zone.ru › C

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

Типы

Определено в заголовке <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 intN_t, int_fastN_t, int_leastN_t, uintN_t, uint_fastN_t, и uint_leastN_t когда N не равно 8, 16, 32 или 64. Имена typedef вида intN_t могут быть определены только в том случае, если реализация поддерживает целочисленный тип такой ширины без заполняющих битов. Таким образом, uint24_t обозначает беззнаковый целочисленный тип шириной ровно 24 бита.

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

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

Определено в заголовке <stdint.h>
Целые числа со знаком : ширина
INT8_WIDTHINT16_WIDTHINT32_WIDTHINT64_WIDTH
(C23)(необязательно)
разрядность объекта типа int8_t, int16_t, int32_t, int64_t (ровно 8, 16, 32, 64)
(макро-константа)
INT_FAST8_WIDTHINT_FAST16_WIDTHINT_FAST32_WIDTHINT_FAST64_WIDTH
(C23)
разрядность объекта типа int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t
(макро-константа)
INT_LEAST8_WIDTHINT_LEAST16_WIDTHINT_LEAST32_WIDTHINT_LEAST64_WIDTH
(C23)
разрядность объекта типа int_least8_t, int_least16_t, int_least32_t, int_least64_t
(макро-константа)
INTPTR_WIDTH
(C23)(необязательно)
разрядность объекта типа intptr_t
(макро-константа)
INTMAX_WIDTH
(C23)
разрядность объекта типа intmax_t
(макро-константа)
Целые числа со знаком : минимальное значение
INT8_MININT16_MININT32_MININT64_MIN
минимальное значение объекта типа int8_t, int16_t, int32_t, int64_t
(макро-константа)
INT_FAST8_MININT_FAST16_MININT_FAST32_MININT_FAST64_MIN
минимальное значение объекта типа int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t
(макро-константа)
INT_LEAST8_MININT_LEAST16_MININT_LEAST32_MININT_LEAST64_MIN
минимальное значение объекта типа int_least8_t, int_least16_t, int_least32_t, int_least64_t
(макро-константа)
INTPTR_MIN
минимальное значение объекта типа intptr_t
(макро-константа)
INTMAX_MIN
минимальное значение объекта типа intmax_t
(макро-константа)
Целые числа со знаком : максимальное значение
INT8_MAXINT16_MAXINT32_MAXINT64_MAX
максимальное значение объекта типа int8_t, int16_t, int32_t, int64_t
(макро-константа)
INT_FAST8_MAXINT_FAST16_MAXINT_FAST32_MAXINT_FAST64_MAX
максимальное значение объекта типа int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t
(макро-константа)
INT_LEAST8_MAXINT_LEAST16_MAXINT_LEAST32_MAXINT_LEAST64_MAX
максимальное значение объекта типа int_least8_t, int_least16_t, int_least32_t, int_least64_t
(макро-константа)
INTPTR_MAX
максимальное значение объекта типа intptr_t
(макро-константа)
INTMAX_MAX
максимальное значение объекта типа intmax_t
(макро-константа)
Целые числа без знака : ширина
UINT8_WIDTHUINT16_WIDTHUINT32_WIDTHUINT64_WIDTH
(C23)(необязательно)
разрядность объекта типа uint8_t, uint16_t, uint32_t, uint64_t (ровно 8, 16, 32, 64)
(макро-константа)
UINT_FAST8_WIDTHUINT_FAST16_WIDTHUINT_FAST32_WIDTHUINT_FAST64_WIDTH
(C23)
разрядность объекта типа uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t
(макро-константа)
UINT_LEAST8_WIDTHUINT_LEAST16_WIDTHUINT_LEAST32_WIDTHUINT_LEAST64_WIDTH
(C23)
разрядность объекта типа uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t
(макро-константа)
UINTPTR_WIDTH
(C23)(необязательно)
разрядность объекта типа uintptr_t
(макро-константа)
UINTMAX_WIDTH
(C23)
разрядность объекта типа uintmax_t
(макро-константа)
Целые числа без знака : максимальное значение
UINT8_MAXUINT16_MAXUINT32_MAXUINT64_MAX
максимальное значение объекта типа uint8_t, uint16_t, uint32_t, uint64_t
(макро-константа)
UINT_FAST8_MAXUINT_FAST16_MAXUINT_FAST32_MAXUINT_FAST64_MAX
максимальное значение объекта типа uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t
(макро-константа)
UINT_LEAST8_MAXUINT_LEAST16_MAXUINT_LEAST32_MAXUINT_LEAST64_MAX
максимальное значение объекта типа uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t
(макро-константа)
UINTPTR_MAX
максимальное значение объекта типа uintptr_t
(макро-константа)
UINTMAX_MAX
максимальное значение объекта типа uintmax_t
(макро-константа)

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

INT8_CINT16_CINT32_CINT64_C
расширяется до целочисленного выражения с указанным значением и типом int_least8_t, int_least16_t, int_least32_t, int_least64_t соответственно
(функциональный макрос)
INTMAX_C
расширяется до целочисленного выражения с указанным значением и типом intmax_t
(функциональный макрос)
UINT8_CUINT16_CUINT32_CUINT64_C
расширяется до целочисленного выражения с указанным значением и типом uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t соответственно
(функциональный макрос)
UINTMAX_C
расширяется до целочисленного выражения с указанным значением и типом uintmax_t
(функциональный макрос)
#include <stdint.h>
UINT64_C(0x123) // might expand to 0x123ULL or 0x123UL

Формат макро-констант

Определено в заголовке <inttypes.h>

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

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

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




[u]intx_t




[u]int_leastx_t
[u]int_fastx_t
[u]intmax_t
[u]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

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

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

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




[u]intx_t




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

#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:2023):
    • 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++ по Целочисленные типы фиксированной ширины
Документация C++ по Пользовательские литералы (примечание к макросам форматирования)

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

Spec-Zone.ru

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