C stdint (stdint.h) Library
C stdint Types
The <stdint.h> header has integer types with an exact size, so they work the same on every system.
Example
Use integer types with an exact size:
int8_t small = 100;
uint16_t medium = 50000;
int32_t big = 2000000000;
printf("%d\n", small);
printf("%u\n", medium);
printf("%d\n", big);
| Type | Size | Range |
|---|---|---|
| int8_t | 8 bits (1 byte) | -128 to 127 |
| uint8_t | 8 bits (1 byte) | 0 to 255 |
| int16_t | 16 bits (2 bytes) | -32,768 to 32,767 |
| uint16_t | 16 bits (2 bytes) | 0 to 65,535 |
| int32_t | 32 bits (4 bytes) | -2,147,483,648 to 2,147,483,647 |
| uint32_t | 32 bits (4 bytes) | 0 to 4,294,967,295 |
| int64_t | 64 bits (8 bytes) | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| uint64_t | 64 bits (8 bytes) | 0 to 18,446,744,073,709,551,615 |
Other Types
In the table, N is 8, 16, 32 or 64:
| Type | Description |
|---|---|
| int_leastN_t, uint_leastN_t | The smallest type with at least N bits |
| int_fastN_t, uint_fastN_t | The fastest type with at least N bits |
| intmax_t, uintmax_t | The biggest signed and unsigned integer types |
| intptr_t, uintptr_t | Integer types that can store a pointer (not all systems have them) |
Limits
| Constant | Value |
|---|---|
| INT8_MIN | -128 |
| INT8_MAX | 127 |
| UINT8_MAX | 255 |
| INT16_MIN | -32768 |
| INT16_MAX | 32767 |
| UINT16_MAX | 65535 |
| INT32_MIN | -2147483648 |
| INT32_MAX | 2147483647 |
| UINT32_MAX | 4294967295 |
| INT64_MIN | -9223372036854775808 |
| INT64_MAX | 9223372036854775807 |
| UINT64_MAX | 18446744073709551615 |
| SIZE_MAX | The largest value of size_t (18446744073709551615 on 64-bit systems) |
C inttypes.h Format Macros
The <inttypes.h> header includes <stdint.h>, and adds macros to print and read the fixed-width types with printf() and scanf(). They work on every system, also where int64_t is not a long long.
Each macro is a string with the right format letters for your system. Write it after the "%", outside the quotes:
Example
Print an int64_t on any system:
int64_t population = 8000000000;
printf("%" PRId64 "\n", population);
| Macro | Description |
|---|---|
| PRId8, PRId16, PRId32, PRId64 | Print a signed type with printf() |
| PRIu8, PRIu16, PRIu32, PRIu64 | Print an unsigned type with printf() |
| PRIx8, PRIx16, PRIx32, PRIx64 | Print an unsigned type as a hexadecimal number with printf() |
| SCNd8, SCNd16, SCNd32, SCNd64 | Read a signed type with scanf() |
| SCNu8, SCNu16, SCNu32, SCNu64 | Read an unsigned type with scanf() |
Related Pages
Read more in our C Fixed-width Integers Tutorial.