Целые числа в Си
В заголовочных файлах 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 | limits.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.