Целочисленные типы фиксированной ширины (начиная с C99)
Типы
Для каждого из следующих имён typedef, отмеченных как (необязательно), реализация определяет его тогда и только тогда, когда предоставляет соответствующий тип.
Определён в заголовочном файле <stdint.h> |
|
|---|---|
|
int8_tint16_tint32_tint64_tintN_t
(необязательно)(необязательно)(необязательно)(необязательно)(необязательно) | знаковый целочисленный тип шириной ровно N бит (обычно 8, 16, 32 или 64) и без битов заполнения (typedef) |
|
int_fast8_tint_fast16_tint_fast32_tint_fast64_tint_fastN_t
(необязательно) | самый быстрый знаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (typedef) |
|
int_least8_tint_least16_tint_least32_tint_least64_tint_leastN_t
(необязательно) | наименьший знаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (если определён intN_t, int_leastN_t обозначает тот же тип) (typedef) |
|
intmax_t | знаковый целочисленный тип максимальной ширины, отличный от целочисленного типа с точной шириной в битах(начиная с C23) (typedef) |
|
intptr_t
(необязательно) | знаковый целочисленный тип, отличный от целочисленного типа с точной шириной в битах(начиная с C23), способный хранить указатель на void (typedef) |
|
uint8_tuint16_tuint32_tuint64_tuintN_t
(необязательно)(необязательно)(необязательно)(необязательно)(необязательно) | беззнаковый целочисленный тип шириной ровно N бит (обычно 8, 16, 32 или 64) и без битов заполнения (typedef) |
|
uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_tuint_fastN_t
(необязательно) | самый быстрый беззнаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (typedef) |
|
uint_least8_tuint_least16_tuint_least32_tuint_least64_tuint_leastN_t
(необязательно) | наименьший беззнаковый целочисленный тип шириной не менее N бит (обычно 8, 16, 32 или 64) (если определён uintN_t, uint_leastN_t обозначает тот же тип) (typedef) |
|
uintmax_t | беззнаковый целочисленный тип максимальной ширины, отличный от целочисленного типа с точной шириной в битах(начиная с C23) (typedef) |
|
uintptr_t
(необязательно) | беззнаковый целочисленный тип, отличный от целочисленного типа с точной шириной в битах(начиная с C23), способный хранить указатель на void (typedef) |
Макросы-константы
Для каждого из следующих макросов, отмеченных как (присутствует при определённых условиях), реализация определяет его тогда и только тогда, когда определяет соответствующее имя typedef.
Определены в заголовочном файле <stdint.h> |
|
|---|---|
Знаковые целые числа: ширина в битах |
|
|
INTN_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа intN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INT_FASTN_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа int_fastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INT_LEASTN_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа int_leastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INTMAX_WIDTH
(C23) | ширина в битах типа intmax_t (макрос-константа) |
|
INTPTR_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа intptr_t (макрос-константа) |
Знаковые целые числа: минимальное значение |
|
|
INTN_MIN
(присутствует при определённых условиях) | минимальное значение типа intN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INT_FASTN_MIN
(присутствует при определённых условиях) | минимальное значение типа int_fastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INT_LEASTN_MIN
(присутствует при определённых условиях) | минимальное значение типа int_leastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INTMAX_MIN | минимальное значение типа intmax_t (макрос-константа) |
|
INTPTR_MIN
(присутствует при определённых условиях) | минимальное значение типа intptr_t (макрос-константа) |
Знаковые целые числа: максимальное значение |
|
|
INTN_MAX
(присутствует при определённых условиях) | максимальное значение типа intN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INT_FASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа int_fastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INT_LEASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа int_leastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
INTMAX_MAX | максимальное значение типа intmax_t (макрос-константа) |
|
INTPTR_MAX
(присутствует при определённых условиях) | максимальное значение типа intptr_t (макрос-константа) |
Беззнаковые целые числа: ширина в битах |
|
|
UINTN_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа uintN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
UINT_FASTN_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа uint_fastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
UINT_LEASTN_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа uint_leastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
UINTMAX_WIDTH
(C23) | ширина в битах типа uintmax_t (макрос-константа) |
|
UINTPTR_WIDTH
(C23)(присутствует при определённых условиях) | ширина в битах типа uintptr_t (макрос-константа) |
Беззнаковые целые числа: максимальное значение |
|
|
UINTN_MAX
(присутствует при определённых условиях) | максимальное значение типа uintN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
UINT_FASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа uint_fastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
UINT_LEASTN_MAX
(присутствует при определённых условиях) | максимальное значение типа uint_leastN_t (N обычно равно 8, 16, 32 или 64) (макрос-константа) |
|
UINTMAX_MAX | максимальное значение типа uintmax_t (макрос-константа) |
|
UINTPTR_MAX
(присутствует при определённых условиях) | максимальное значение типа uintptr_t (макрос-константа) |
Макросы-функции
Для каждого из следующих макросов, отмеченных как (присутствует при определённых условиях), реализация определяет его тогда и только тогда, когда определяет соответствующее имя typedef.
|
INTN_C
(присутствует при определённых условиях) | разворачивается в целочисленное константное выражение типа int_leastN_t; его значение задаётся аргументом (макрос-функция) |
|
INTMAX_C | разворачивается в целочисленное константное выражение типа intmax_t; его значение задаётся аргументом (макрос-функция) |
|
UINTN_C
(присутствует при определённых условиях) | разворачивается в целочисленное константное выражение типа uint_leastN_t; его значение задаётся аргументом (макрос-функция) |
|
UINTMAX_C | разворачивается в целочисленное константное выражение типа uintmax_t; его значение задаётся аргументом (макрос-функция) |
#include <stdint.h> UINT64_C(0x123) // might expand to 0x123ULL or 0x123UL
Макросы-константы формата
Определены в заголовочном файле <inttypes.h> |
|---|
Константы формата для семейства функций fprintf
Каждый из перечисленных здесь макросов PRI определён тогда и только тогда, когда реализация определяет соответствующее имя typedef.
| Эквивалент для int или unsignedint | Описание | Макросы для типов данных | ||||
|---|---|---|---|---|---|---|
[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 или unsignedint | Описание | Макросы для типов данных | ||||
|---|---|---|---|---|---|---|
[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:2024):
- 7.8.1 Макросы для спецификаторов формата (стр.: уточняется)
- 7.18 Целочисленные типы <stdint.h> (стр.: уточняется)
- Стандарт 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/c/types/integer