Fixed width integer types (since C99)

From cppreference.com
< c‎ | types

Contents

[edit] Types

Defined in header <stdint.h>
int8_t
int16_t
int32_t
int64_t
signed integer type with width of
exactly 8, 16, 32 and 64 bits respectively
with no padding bits and using 2's complement for negative values
(provided only if the implementation directly supports the type)
int_fast8_t
int_fast16_t
int_fast32_t
int_fast64_t
fastest signed integer type with width of
at least 8, 16, 32 and 64 bits respectively
int_least8_t
int_least16_t
int_least32_t
int_least64_t
smallest signed integer type with width of
at least 8, 16, 32 and 64 bits respectively
intmax_t maximum width integer type
intptr_t integer type capable of holding a pointer
uint8_t
uint16_t
uint32_t
uint64_t
unsigned integer type with width of
exactly 8, 16, 32 and 64 bits respectively
(provided only if the implementation directly supports the type)
uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t
fastest unsigned integer type with width of
at least 8, 16, 32 and 64 bits respectively
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t
smallest unsigned integer type with width of
at least 8, 16, 32 and 64 bits respectively
uintmax_t maximum width unsigned integer type
uintptr_t unsigned integer type capable of holding a pointer

[edit] Macro constants

Defined in header <stdint.h>
Signed integers : minimum value
INT8_MIN
INT16_MIN
INT32_MIN
INT64_MIN
minimum value of an object of type int8_t, int16_t, int32_t, int64_t
(macro constant)
INT_FAST8_MIN
INT_FAST16_MIN
INT_FAST32_MIN
INT_FAST64_MIN
minimum value of an object of type int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t
(macro constant)
INT_LEAST8_MIN
INT_LEAST16_MIN
INT_LEAST32_MIN
INT_LEAST64_MIN
minimum value of an object of type int_least8_t, int_least16_t, int_least32_t, int_least64_t
(macro constant)
INTPTR_MIN
minimum value of an object of type intptr_t
(macro constant)
INTMAX_MIN
minimum value of an object of type intmax_t
(macro constant)
Signed integers : maximum value
INT8_MAX
INT16_MAX
INT32_MAX
INT64_MAX
maximum value of an object of type int8_t, int16_t, int32_t, int64_t
(macro constant)
INT_FAST8_MAX
INT_FAST16_MAX
INT_FAST32_MAX
INT_FAST64_MAX
maximum value of an object of type int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t
(macro constant)
INT_LEAST8_MAX
INT_LEAST16_MAX
INT_LEAST32_MAX
INT_LEAST64_MAX
maximum value of an object of type int_least8_t, int_least16_t, int_least32_t, int_least64_t
(macro constant)
INTPTR_MAX
maximum value of an object of type intptr_t
(macro constant)
INTMAX_MAX
maximum value of an object of type intmax_t
(macro constant)
Unsigned integers : maximum value
UINT8_MAX
UINT16_MAX
UINT32_MAX
UINT64_MAX
maximum value of an object of type uint8_t, uint16_t, uint32_t, uint64_t
(macro constant)
UINT_FAST8_MAX
UINT_FAST16_MAX
UINT_FAST32_MAX
UINT_FAST64_MAX
maximum value of an object of type uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t
(macro constant)
UINT_LEAST8_MAX
UINT_LEAST16_MAX
UINT_LEAST32_MAX
UINT_LEAST64_MAX
maximum value of an object of type uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t
(macro constant)
UINTPTR_MAX
maximum value of an object of type uintptr_t
(macro constant)
UINTMAX_MAX
maximum value of an object of type uintmax_t
(macro constant)

[edit] Function macros for minimum-width integer constants

INT8_C
INT16_C
INT32_C
INT64_C
expands to an integer constant expression having the value specified by its argument and the type int_least8_t, int_least16_t, int_least32_t, int_least64_t respectively
(function macro)
INTMAX_C
expands to an integer constant expression having the value specified by its argument and the type intmax_t
(function macro)
UINT8_C
UINT16_C
UINT32_C
UINT64_C
expands to an integer constant expression having the value specified by its argument and the type uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t respectively
(function macro)
UINTMAX_C
expands to an integer constant expression having the value specified by its argument and the type uintmax_t
(function macro)
#include <stdint.h>
UINT64_C(0x123) // might expand to 0x123ULL or 0x123UL


[edit] Format macro constants

Defined in header <inttypes.h>
Format constants for the fprintf family of functions
PRId8
PRId16
PRId32
PRId64
PRIdLEAST8
PRIdLEAST16
PRIdLEAST32
PRIdLEAST64
PRIdFAST8
PRIdFAST16
PRIdFAST32
PRIdFAST64
PRIdMAX
PRIdPTR
format conversion specifier to output a signed decimal integer value of type int8_t, int16_t, int32_t, int64_t, int_least8_t, int_least16_t, int_least32_t, int_least64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, intmax_t, intptr_t respectively, equivalent to %d for int
(macro constant)
PRIi8
PRIi16
PRIi32
PRIi64
PRIiLEAST8
PRIiLEAST16
PRIiLEAST32
PRIiLEAST64
PRIiFAST8
PRIiFAST16
PRIiFAST32
PRIiFAST64
PRIiMAX
PRIiPTR
format conversion specifier to output a signed decimal integer value of type int8_t, int16_t, int32_t, int64_t, int_least8_t, int_least16_t, int_least32_t, int_least64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, intmax_t, intptr_t respectively, equivalent to %i for int
(macro constant)
PRIu8
PRIu16
PRIu32
PRIu64
PRIuLEAST8
PRIuLEAST16
PRIuLEAST32
PRIuLEAST64
PRIuFAST8
PRIuFAST16
PRIuFAST32
PRIuFAST64
PRIuMAX
PRIuPTR
format conversion specifier to output an unsigned decimal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %u for unsigned int
(macro constant)
PRIo8
PRIo16
PRIo32
PRIo64
PRIoLEAST8
PRIoLEAST16
PRIoLEAST32
PRIoLEAST64
PRIoFAST8
PRIoFAST16
PRIoFAST32
PRIoFAST64
PRIoMAX
PRIoPTR
format conversion specifier to output an unsigned octal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %o for unsigned int
(macro constant)
PRIx8
PRIx16
PRIx32
PRIx64
PRIxLEAST8
PRIxLEAST16
PRIxLEAST32
PRIxLEAST64
PRIxFAST8
PRIxFAST16
PRIxFAST32
PRIxFAST64
PRIxMAX
PRIxPTR
format conversion specifier to output an unsigned hexadecimal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %x for unsigned int
(macro constant)
PRIX8
PRIX16
PRIX32
PRIX64
PRIXLEAST8
PRIXLEAST16
PRIXLEAST32
PRIXLEAST64
PRIXFAST8
PRIXFAST16
PRIXFAST32
PRIXFAST64
PRIXMAX
PRIXPTR
format conversion specifier to output an unsigned uppercase hexadecimal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %X for unsigned int
(macro constant)
Format constants for the fscanf family of functions
SCNd8
SCNd16
SCNd32
SCNd64
SCNdLEAST8
SCNdLEAST16
SCNdLEAST32
SCNdLEAST64
SCNdFAST8
SCNdFAST16
SCNdFAST32
SCNdFAST64
SCNdMAX
SCNdPTR
format conversion specifier to input a signed decimal integer value of type int8_t, int16_t, int32_t, int64_t, int_least8_t, int_least16_t, int_least32_t, int_least64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, intmax_t, intptr_t respectively, equivalent to %d for int
(macro constant)
SCNi8
SCNi16
SCNi32
SCNi64
SCNiLEAST8
SCNiLEAST16
SCNiLEAST32
SCNiLEAST64
SCNiFAST8
SCNiFAST16
SCNiFAST32
SCNiFAST64
SCNiMAX
SCNiPTR
format conversion specifier to input a signed decimal/octal/hexadecimal integer value of type int8_t, int16_t, int32_t, int64_t, int_least8_t, int_least16_t, int_least32_t, int_least64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, intmax_t, intptr_t respectively, equivalent to %i for int
(macro constant)
SCNu8
SCNu16
SCNu32
SCNu64
SCNuLEAST8
SCNuLEAST16
SCNuLEAST32
SCNuLEAST64
SCNuFAST8
SCNuFAST16
SCNuFAST32
SCNuFAST64
SCNuMAX
SCNuPTR
format conversion specifier to input an unsigned decimal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %u for unsigned int
(macro constant)
SCNo8
SCNo16
SCNo32
SCNo64
SCNoLEAST8
SCNoLEAST16
SCNoLEAST32
SCNoLEAST64
SCNoFAST8
SCNoFAST16
SCNoFAST32
SCNoFAST64
SCNoMAX
SCNoPTR
format conversion specifier to input an unsigned octal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %o for unsigned int
(macro constant)
SCNx8
SCNx16
SCNx32
SCNx64
SCNxLEAST8
SCNxLEAST16
SCNxLEAST32
SCNxLEAST64
SCNxFAST8
SCNxFAST16
SCNxFAST32
SCNxFAST64
SCNxMAX
SCNxPTR
format conversion specifier to input an unsigned hexadecimal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %x for unsigned int
(macro constant)
SCNX8
SCNX16
SCNX32
SCNX64
SCNXLEAST8
SCNXLEAST16
SCNXLEAST32
SCNXLEAST64
SCNXFAST8
SCNXFAST16
SCNXFAST32
SCNXFAST64
SCNXMAX
SCNXPTR
format conversion specifier to input an unsigned uppercase hexadecimal integer value of type uint8_t, uint16_t, uint32_t, uint64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uintmax_t, uintptr_t respectively, equivalent to %X for unsigned int
(macro constant)

[edit] Example

#include <stdio.h>
#include <inttypes.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);
 
    return 0;
}

Possible output:

8
ld
-9223372036854775808
+9223372036854775807
+7

[edit] See also