整数数据类型的别名,数据表示范围,以及宏函数。
The following are typedefs of fundamental integral types or extended integral types.
signed type | unsigned type | description |
---|---|---|
intmax_t | uintmax_t | Integer type with the maximum width supported. |
int8_t | uint8_t | Integer type with a width of exactly 8, 16, 32, or 64 bits. For signed types, negative values are represented using 2’s complement. No padding bits. Optional: These typedefs are not defined if no types with such characteristics exist.* |
int16_t | uint16_t | |
int32_t | uint32_t | |
int64_t | uint64_t | |
int_least8_t | uint_least8_t | Integer type with a minimum of 8, 16, 32, or 64 bits. No other integer type exists with lesser size and at least the specified width. |
int_least16_t | uint_least16_t | |
int_least32_t | uint_least32_t | |
int_least64_t | uint_least64_t | |
int_fast8_t | uint_fast8_t | Integer type with a minimum of 8, 16, 32, or 64 bits. At least as fast as any other integer type with at least the specified width. |
int_fast16_t | uint_fast16_t | |
int_fast32_t | uint_fast32_t | |
int_fast64_t | uint_fast64_t | |
intptr_t | uintptr_t | Integer type capable of holding a value converted from a void pointer and then be converted back to that type with a value that compares equal to the original pointer.Optional: These typedefs may not be defined in some library implementations.* |
Some of these typedefs may denote the same types. Therefore, function overloads should not rely on these being different.
* Notice that some types are optional (and thus, with no portability guarantees). A particular library implementation may also define additional types with other widths supported by its system. In any case, if either the signed or the unsigned version is defined, both the signed and unsigned versions are defined.
cstdint
typesMacro | description | defined as |
---|---|---|
INTMAX_MIN | Minimum value of intmax_t | -(263-1), or lower |
INTMAX_MAX | Maximum value of intmax_t | 263-1, or higher |
UINTMAX_MAX | Maximum value of uintmax_t | 264-1, or higher |
INTN_MIN | Minimum value of exact-width signed type | Exactly -2(N-1) |
INTN_MAX | Maximum value of exact-width signed type | Exactly 2(N-1)-1 |
UINTN_MAX | Maximum value of exact-width unsigned type | Exactly 2N-1 |
INT_LEASTN_MIN | Minimum value of minimum-width signed type | -(2(N-1)-1), or lower |
INT_LEASTN_MAX | Maximum value of minimum-width signed type | 2(N-1)-1, or higher |
UINT_LEASTN_MAX | Maximum value of minimum-width unsigned type | 2N-1, or higher |
INT_FASTN_MIN | Minimum value of fastest minimum-width signed type | -(2(N-1)-1), or lower |
INT_FASTN_MAX | Maximum value of fastest minimum-width signed type | 2(N-1)-1, or higher |
UINT_FASTN_MAX | Maximum value of fastest minimum-width unsigned type | 2N-1, or higher |
INTPTR_MIN | Minimum value of intptr_t | -(215-1), or lower |
INTPTR_MAX | Maximum value of intptr_t | 215-1, or higher |
UINTPTR_MAX | Maximum value of uintptr_t | 216-1, or higher |
Where N is one in 8, 16, 32, 64, or any other type width supported by the library.
Only the macros corresponding to types supported by the library are defined.
Limits of other standard integral types:
Macro | description | defined as |
---|---|---|
SIZE_MAX | Maximum value of size_t | 264-1, or higher |
PTRDIFF_MIN | Minimum value of ptrdiff_t | -(216-1), or lower |
PTRDIFF_MAX | Maximum value of ptrdiff_t | 216-1, or higher |
SIG_ATOMIC_MIN | Minimum value of sig_atomic_t | if sig_atomic_t is signed: -127, or lower if sig_atomic_t is unsigned: 0 |
SIG_ATOMIC_MAX | Maximum value of sig_atomic_t | if sig_atomic_t is signed: 127, or higher if sig_atomic_t is unsigned: 255, or higher |
WCHAR_MIN | Minimum value of wchar_t |
if wchar_t is signed: -127, or lowerif wchar_t is unsigned: 0 |
WCHAR_MAX | Maximum value of wchar_t |
if wchar_t is signed: 127, or higherif wchar_t is unsigned: 255, or higher |
WINT_MIN | Minimum value of wint_t | if wint_t is signed: -32767, or lower if wint_t is unsigned: 0 |
WINT_MAX | Maximum value of wint_t | if wint_t is signed: 32767, or higher if wint_t is unsigned: 65535, or higher |
These function-like macros expand to integer constants suitable to initialize objects of the types above:
Macro | description |
---|---|
INTMAX_C | expands to a value of type intmax_t |
UINTMAX_C | expands to a value of type uintmax_t |
INTN_C | expands to a value of type int_leastN_t |
UINTN_C | expands to a value of type uint_leastN_t |
For example:
|
INTMAX_C(2012) // expands to 2012LL or similar |
/* The ISO C99 standard specifies that in C++ implementations these macros should only be defined if explicitly requested. */ #if !defined __cplusplus || defined __STDC_LIMIT_MACROS # if __WORDSIZE == 64 # define __INT64_C(c) c ## L # define __UINT64_C(c) c ## UL # else # define __INT64_C(c) c ## LL # define __UINT64_C(c) c ## ULL # endif /* Limits of integral types. */ /* Minimum of signed integral types. */ # define INT8_MIN (-128) # define INT16_MIN (-32767-1) # define INT32_MIN (-2147483647-1) # define INT64_MIN (-__INT64_C(9223372036854775807)-1) /* Maximum of signed integral types. */ # define INT8_MAX (127) # define INT16_MAX (32767) # define INT32_MAX (2147483647) # define INT64_MAX (__INT64_C(9223372036854775807)) /* Maximum of unsigned integral types. */ # define UINT8_MAX (255) # define UINT16_MAX (65535) # define UINT32_MAX (4294967295U) # define UINT64_MAX (__UINT64_C(18446744073709551615)) /* Minimum of signed integral types having a minimum size. */ # define INT_LEAST8_MIN (-128) # define INT_LEAST16_MIN (-32767-1) # define INT_LEAST32_MIN (-2147483647-1) # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) /* Maximum of signed integral types having a minimum size. */ # define INT_LEAST8_MAX (127) # define INT_LEAST16_MAX (32767) # define INT_LEAST32_MAX (2147483647) # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) /* Maximum of unsigned integral types having a minimum size. */ # define UINT_LEAST8_MAX (255) # define UINT_LEAST16_MAX (65535) # define UINT_LEAST32_MAX (4294967295U) # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) /* Minimum of fast signed integral types having a minimum size. */ # define INT_FAST8_MIN (-128) # if __WORDSIZE == 64 # define INT_FAST16_MIN (-9223372036854775807L-1) # define INT_FAST32_MIN (-9223372036854775807L-1) # else # define INT_FAST16_MIN (-2147483647-1) # define INT_FAST32_MIN (-2147483647-1) # endif # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) /* Maximum of fast signed integral types having a minimum size. */ # define INT_FAST8_MAX (127) # if __WORDSIZE == 64 # define INT_FAST16_MAX (9223372036854775807L) # define INT_FAST32_MAX (9223372036854775807L) # else # define INT_FAST16_MAX (2147483647) # define INT_FAST32_MAX (2147483647) # endif # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) /* Maximum of fast unsigned integral types having a minimum size. */ # define UINT_FAST8_MAX (255) # if __WORDSIZE == 64 # define UINT_FAST16_MAX (18446744073709551615UL) # define UINT_FAST32_MAX (18446744073709551615UL) # else # define UINT_FAST16_MAX (4294967295U) # define UINT_FAST32_MAX (4294967295U) # endif # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) /* Values to test for integral types holding `void *' pointer. */ # if __WORDSIZE == 64 # define INTPTR_MIN (-9223372036854775807L-1) # define INTPTR_MAX (9223372036854775807L) # define UINTPTR_MAX (18446744073709551615UL) # else # define INTPTR_MIN (-2147483647-1) # define INTPTR_MAX (2147483647) # define UINTPTR_MAX (4294967295U) # endif /* Minimum for largest signed integral type. */ # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) /* Maximum for largest signed integral type. */ # define INTMAX_MAX (__INT64_C(9223372036854775807)) /* Maximum for largest unsigned integral type. */ # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) /* Limits of other integer types. */ /* Limits of `ptrdiff_t' type. */ # if __WORDSIZE == 64 # define PTRDIFF_MIN (-9223372036854775807L-1) # define PTRDIFF_MAX (9223372036854775807L) # else # define PTRDIFF_MIN (-2147483647-1) # define PTRDIFF_MAX (2147483647) # endif /* Limits of `sig_atomic_t'. */ # define SIG_ATOMIC_MIN (-2147483647-1) # define SIG_ATOMIC_MAX (2147483647) /* Limit of `size_t' type. */ # if __WORDSIZE == 64 # define SIZE_MAX (18446744073709551615UL) # else # define SIZE_MAX (4294967295U) # endif /* Limits of `wchar_t'. */ # ifndef WCHAR_MIN /* These constants might also be defined in. */ # define WCHAR_MIN __WCHAR_MIN # define WCHAR_MAX __WCHAR_MAX # endif /* Limits of `wint_t'. */ # define WINT_MIN (0u) # define WINT_MAX (4294967295u) #endif /* C++ && limit macros */ /* The ISO C99 standard specifies that in C++ implementations these should only be defined if explicitly requested. */ #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS /* Signed. */ # define INT8_C(c) c # define INT16_C(c) c # define INT32_C(c) c # if __WORDSIZE == 64 # define INT64_C(c) c ## L # else # define INT64_C(c) c ## LL # endif /* Unsigned. */ # define UINT8_C(c) c ## U # define UINT16_C(c) c ## U # define UINT32_C(c) c ## U # if __WORDSIZE == 64 # define UINT64_C(c) c ## UL # else # define UINT64_C(c) c ## ULL # endif /* Maximal type. */ # if __WORDSIZE == 64 # define INTMAX_C(c) c ## L # define UINTMAX_C(c) c ## UL # else # define INTMAX_C(c) c ## LL # define UINTMAX_C(c) c ## ULL # endif #endif /* C++ && constant macros */ #endif /* stdint.h */