C++ - Numerics
C leaves the size of an integer open: the compiler implementors could pick a size for int that performs best on the target computer architecture.
C++ only guarantees that integer variables will have a minimum size -- but they could be larger, depending on the target system.
x86_64 int is 32 bits, a long is 64 bits, and a pointer is 64 bits.
You should prefer the fixed-width integral types. (https://google.github.io/styleguide/cppguide.html#Integer_Types) Do not use built-in integer type other than
int for integers we know are not going to be too big).
Fixed-width Integers were introduced in C99 (in
stdint.h header) and C++11 (in
Types with a prefix
u are unsigned.
||1 byte||-128 to 127|
||1 byte||0 to 255|
||2 byte||-32,768 to 32,767|
||2 byte||0 to 65,535|
||4 byte||-2,147,483,648 to 2,147,483,647|
||4 byte||0 to 4,294,967,295|
||8 byte||-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807|
||8 byte||0 to 18,446,744,073,709,551,615|
std::uint8_t may be treated as signed char and unsigned char respectively.
It is safe for code to assume that
<cstdint> defines the type aliases
int64_t in the global namespaces as well as in namespace
Fast and Least Types
C++ also defines two alternative sets of integers.
The fast type (
std::int_fast#_t) provides the fastest signed integer type with a width of at least # bits (where # = 8, 16, 32, or 64). For example,
std::int_fast32_t will give you the fastest signed integer type that’s at least 32 bits.
The least type (
std::int_least#_t) provides the smallest signed integer type with a width of at least # bits (where # = 8, 16, 32, or 64). For example,
std::int_least32_t will give you the smallest signed integer type that’s at least 32 bits.