Целые числа в Си
В заголовочных файлах stdint.h
и inttypes.h
определены целочисленные типы и макросы для работы с целыми числами со знаком и без знака разрядностью 8, 16, 32 и 64 бита.
Тип | Минимальное значение | Максимальное значение | Макрос для определения констант | Вывод десятичного | Ввод десятичного | Вывод восьмеричного | Ввод восьмеричного | Вывод шестнадцатеричного | Ввод шестнадцатеричного | Описание |
---|---|---|---|---|---|---|---|---|---|---|
stdint.h | inttypes.h | |||||||||
intmax_t | INTMAX_MIN | INTMAX_MIN | INTMAX_C() | PRIdMAX или PRIiMAX | SCNdMAX или SCNiMAX | Целое число со знаком максимальной ширины. | ||||
uintmax_t | 0 | UINTMAX_MAX | UINTMAX_C() | PRIuMAX | SCNuMAX | PRIoMAX | SCNoMAX | PRIxMAX или PRIXMAX | SCNxMAX или SCNXMAX | Целое число без знака максимальной ширины. |
int8_t | INT8_MIN | INT8_MAX | INT8_C() | PRId8 или PRIi8 | SCNd8 или SCNi8 | Целое 8-битное со знаком. Тип может быть не определён, если на платформе нет соответствующего типа. | ||||
uint8_t | 0 | UINT8_MAX | UINT8_C() | PRIu8 | SCNu8 | PRIo8 | SCNo8 | PRIx8 или PRIX8 | SCNx8 или SCNX8 | Целое 8-битное без знака. Тип может быть не определён, если на платформе нет соответствующего типа. |
int16_t | INT16_MIN | INT16_MAX | INT16_C() | PRId16 или PRIi16 | SCNd16 или SCNi16 | Целое 16-битное со знаком. Тип может быть не определён, если на платформе нет соответствующего типа. | ||||
uint16_t | 0 | UINT16_MAX | UINT16_C() | PRIu16 | SCNu16 | PRIo16 | SCNo16 | PRIx16 или PRIX16 | SCNx16 или SCNX16 | Целое 16-битное без знака. Тип может быть не определён, если на платформе нет соответствующего типа. |
int32_t | INT32_MIN | INT32_MAX | INT32_C() | PRId32 или PRIi32 | SCNd32 или SCNi32 | Целое 32-битное со знаком. Тип может быть не определён, если на платформе нет соответствующего типа. | ||||
uint32_t | 0 | UINT32_MAX | UINT32_C() | PRIu32 | SCNu32 | PRIo32 | SCNo32 | PRIx32 или PRIX32 | SCNx32 или SCNX32 | Целое 32-битное без знака. Тип может быть не определён, если на платформе нет соответствующего типа. |
int64_t | INT64_MIN | INT64_MAX | INT64_C() | PRId64 или PRIi64 | SCNd64 или SCNi64 | Целое 64-битное со знаком. Тип может быть не определён, если на платформе нет соответствующего типа. | ||||
uint64_t | 0 | UINT64_MAX | UINT64_C() | PRIu64 | SCNu64 | PRIo64 | SCNo64 | PRIx64 или PRIX64 | SCNx64 или SCNX64 | Целое 64-битное без знака. Тип может быть не определён, если на платформе нет соответствующего типа. |
int_least8_t | INT_LEAST8_MIN | INT_LEAST8_MAX | INT8_C() | PRIdLEAST8 или PRIiLEAST8 | SCNdLEAST8 или SCNiLEAST8 | Целое со знаком, вмещающее минимум 8 бит. | ||||
uint_least8_t | 0 | UINT_LEAST8_MAX | UINT8_C() | PRIuLEAST8 | SCNuLEAST8 | PRIoLEAST8 | SCNoLEAST8 | PRIxLEAST8 или PRIXLEAST8 | SCNxLEAST8 или SCNXLEAST8 | Целое без знака, вмещающее минимум 8 бита. |
int_least16_t | INT_LEAST16_MIN | INT_LEAST16_MAX | INT16_C() | PRIdLEAST16 или PRIiLEAST16 | SCNdLEAST16 или SCNiLEAST16 | Целое со знаком, вмещающее минимум 16 бит. | ||||
uint_least16_t | 0 | UINT_LEAST16_MAX | UINT16_C() | PRIuLEAST16 | SCNuLEAST16 | PRIoLEAST16 | SCNoLEAST16 | PRIxLEAST16 или PRIXLEAST16 | SCNxLEAST16 или SCNXLEAST16 | Целое без знака, вмещающее минимум 16 бита. |
int_least32_t | INT_LEAST32_MIN | INT_LEAST32_MAX | INT32_C() | PRIdLEAST32 или PRIiLEAST32 | SCNdLEAST32 или SCNiLEAST32 | Целое со знаком, вмещающее минимум 32 бита. | ||||
uint_least32_t | 0 | UINT_LEAST32_MAX | UINT32_C() | PRIuLEAST32 | SCNuLEAST32 | PRIoLEAST32 | SCNoLEAST32 | PRIxLEAST32 или PRIXLEAST32 | SCNxLEAST32 или SCNXLEAST32 | Целое без знака, вмещающее минимум 32 бита. |
int_least64_t | INT_LEAST64_MIN | INT_LEAST64_MAX | INT64_C() | PRIdLEAST64 или PRIiLEAST64 | SCNdLEAST64 или SCNiLEAST64 | Целое со знаком, вмещающее минимум 64 бита. | ||||
uint_least64_t | 0 | UINT_LEAST64_MAX | UINT64_C() | PRIuLEAST64 | SCNuLEAST64 | PRIoLEAST64 | SCNoLEAST64 | PRIxLEAST64 или PRIXLEAST64 | SCNxLEAST64 или SCNXLEAST64 | Целое без знака, вмещающее минимум 64 бита. |
int_fast8_t | INT_FAST8_MIN | INT_FAST8_MAX | INT8_C() | PRIdFAST8 или PRIiFAST8 | SCNdFAST8 или SCNiFAST8 | Самое быстрое целое со знаком, вмещающее минимум 8 бит. | ||||
uint_fast8_t | 0 | UINT_FAST8_MAX | UINT8_C() | PRIuFAST8 | SCNuFAST8 | PRIoFAST8 | SCNoFAST8 | PRIxLFAST8 или PRIXFAST8 | SCNxLFAST8 или SCNXFAST8 | Самое быстрое целое без знака, вмещающее минимум 8 бита. |
int_fast16_t | INT_FAST16_MIN | INT_FAST16_MAX | INT16_C() | PRIdFAST16 или PRIiFAST16 | SCNdFAST16 или SCNiFAST16 | Самое быстрое целое со знаком, вмещающее минимум 16 бит. | ||||
uint_fast16_t | 0 | UINT_FAST16_MAX | UINT16_C() | PRIuFAST16 | SCNuFAST16 | PRIoFAST16 | SCNoFAST16 | PRIxLFAST16 или PRIXFAST16 | SCNxLFAST16 или SCNXFAST16 | Самое быстрое целое без знака, вмещающее минимум 16 бита. |
int_fast32_t | INT_FAST32_MIN | INT_FAST32_MAX | INT32_C() | PRIdFAST32 или PRIiFAST32 | SCNdFAST32 или SCNiFAST32 | Самое быстрое целое со знаком, вмещающее минимум 32 бита. | ||||
uint_fast32_t | 0 | UINT_FAST32_MAX | UINT32_C() | PRIuFAST32 | SCNuFAST32 | PRIoFAST32 | SCNoFAST32 | PRIxLFAST32 или PRIXFAST32 | SCNxLFAST32 или SCNXFAST32 | Самое быстрое целое без знака, вмещающее минимум 32 бита. |
int_fast64_t | INT_FAST64_MIN | INT_FAST64_MAX | INT64_C() | PRIdFAST64 или PRIiFAST64 | SCNdFAST64 или SCNiFAST64 | Самое быстрое целое со знаком, вмещающее минимум 64 бита. | ||||
uint_fast64_t | 0 | UINT_FAST64_MAX | UINT64_C() | PRIuFAST64 | SCNuFAST64 | PRIoFAST64 | SCNoFAST64 | PRIxLFAST64 или PRIXFAST64 | SCNxLFAST64 или SCNXFAST64 | Самое быстрое целое без знака, вмещающее минимум 64 бита. |
intptr_t | INTPTR_MIN | INTPTR_MAX | PRIdPTR или PRIiPTR | SCNdPTR или SCNiPTR | Целое число со знаком, подходящее для преобразования значений в указатели и из них. | |||||
uintptr_t | 0 | UINTPTR_MAX | PRIuPTR | SCNuPTR | PRIoPTR | SCNoPTR | PRIxPTR или PRIXPTR | SCNxPTR или SCNXPTR | Целое число без знака, подходящее для преобразования значений в указатели и из них. | |
stddef.h | stdint.h | |||||||||
ssize_t | -1 | SSIZE_MAX | ||||||||
size_t | 0 | SIZE_MAX | ||||||||
stddef.h/wchar.h | stdint.h | |||||||||
ptrdiff_t | PTRDIFF_MIN | PTRDIFF_MAX | ||||||||
sig_atomic_t | SIG_ATOMIC_MIN | SIG_ATOMIC_MAX | ||||||||
wchar_t | WCHAR_MIN | WCHAR_MAX | ||||||||
? | stdint.h | |||||||||
wint_t | WINT_MIN | WINT_MAX |
В заголовочном файле inttypes.h
также определён ряд функций, допоолняющих стандартные:
Функция intmax_t imaxabs(intmax_t j)
вычисляет абсолютное значение для целого j. Если результат не может быть вычислен, поведение функции не определено.
Функция imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom)
получает результат деления и остаток от деления. Если одно из них не может быть вычислено, то поведение функции не определено.
Следующие функции эквивалентны strtol
, strtoll
, strtoul
, strtoull
, за исключением того, что строка конвертируется в intmax_t
и uintmax_t
соответственно:
intmax_t strtoimax(const char * restrict nptr, char ** restrict endptr, int base)
uintmax_t strtoumax(const char * restrict nptr, char ** restrict endptr, int base)
intmax_t wcstoimax (const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base)
uintmax_t wcstoumax (const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base)
Функции возвращают преобразованное значение, если его можно представить. В противном случае возвращается один из макросов INTMAX_MAX
, INTMAX_MIN
или UINTMAX_MAX
, а в errno
записывается значение ERANGE
.