Целые числа в Си

В заголовочных файлах 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.