I am new to C/C++, so I have a couple of questions about a basic type:
a) Can you explain to me the difference between int64_t
and long
(long int
)?
In my understanding, both are 64 bit integers. Is there any reason to choose one over the other?
b) I tried to look up the definition of int64_t
on the web, without much success. Is there an authoritative source I need to consult for such questions?
c) For code using int64_t
to compile, I am currently including <iostream>
, which doesn't make much sense to me. Are there other includes that provide a declaration of int64_t
?
The former is a signed integer type with exactly 64 bits. The latter is a signed integer type with at least 32 bits.
http://cppreference.com covers this here: http://en.cppreference.com/w/cpp/types/integer. The authoritative source, however, is the C++ standard (this particular bit can be found in §18.4 Integer types [cstdint]).
It is declared in
<cstdint>
or<cinttypes>
(under namespacestd
), or in<stdint.h>
or<inttypes.h>
(in the global namespace).int64_t
istypedef
you can find that in<stdint.h>
in CAn int64_t should be 64 bits wide on any platform (hence the name), whereas a long can have different lengths on different platforms. In particular, sizeof(long) is often 4, ie. 32 bits.
int64_t
is guaranteed by the C99 standard to be exactly 64 bits wide on platforms that implement it, there's no such guarantee for along
which is at least 32 bits so it could be more.