Целочисленные типы фиксированной ширины (с C99)
Типы
Определено в заголовке <stdint.h> |
|
|---|---|
int8_tint16_tint32_tint64_t | знаковый целочисленный тип шириной ровно 8, 16, 32 и 64 бита соответственно без заполняющих битов и с использованием дополнительного кода для отрицательных значений (предоставляется только в том случае, если реализация напрямую поддерживает тип) |
int_fast8_tint_fast16_tint_fast32_tint_fast64_t | самый быстрый знаковый целочисленный тип шириной по крайней мере 8, 16, 32 и 64 бита соответственно |
int_least8_tint_least16_tint_least32_tint_least64_t | самый маленький знаковый целочисленный тип шириной по крайней мере 8, 16, 32 и 64 бита соответственно |
intmax_t | целочисленный тип максимальной ширины |
intptr_t | целочисленный тип, способный хранить указатель |
uint8_tuint16_tuint32_tuint64_t | беззнаковый целочисленный тип шириной ровно 8, 16, 32 и 64 бита соответственно (предоставляется только в том случае, если реализация напрямую поддерживает тип) |
uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_t | самый быстрый беззнаковый целочисленный тип шириной по крайней мере 8, 16, 32 и 64 бита соответственно |
uint_least8_tuint_least16_tuint_least32_tuint_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