Is C++11's long long really at least 64 bits?
Question
It says on wikipedia and in Stroustrup's FAQ that type long long
is at least as long as an int
and has no fewer than 64 bits. I have been looking at the C++11 standard §3.9.1 Fundamental Types section and I cannot find any reference to 64 bits. All I can find is that it is at least as long at long int
, which is at least as long as int
. The standard lists long long
as a standard integer type, as opposed to an extended one, so I am wondering whether this assertion that long long
holds at least 64 bits is true. And if it is, where is it stated?
Please note that I am talking about C++11 standard long long
only.
Solution
The C++ standard references the C standard for this, see [c.limits]. LLONG_MAX
is defined in <climits>
with the same meaning as C's <limits.h>
's LLONG_MAX
. And this is what C has to say:
5.2.4.2.1 Sizes of integer types
<limits.h>
The values given below shall be replaced by constant expressions suitable for use in
#if
preprocessing directives. [...] Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.[...]
-- maximum value for an object of type
long long int
LLONG_MAX +9223372036854775807 //
263 -1
A signed type that must be capable of representing the value 9223372036854775807
requires 64 bits or more.