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
?
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?
The former is a signed integer type with exactly 64 bits. The latter is a signed integer type with at least 32 bits.
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?
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]).
c) For code using int64_t
to compile, I am including <iostream>
, which doesn't make much sense to me. Are there other includes that provide a declaration of int64_t
?
It is declared in <cstdint>
or <cinttypes>
(under namespace std
), or in <stdint.h>
or <inttypes.h>
(in the global namespace).
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 a long
which is at least 32 bits so it could be more.
§7.18.1.3 Exact-width integer types 1 The typedef name intN_t
designates a signed integer type with width N , no padding bits, and
a two’s complement representation. Thus, int8_t denotes a signed
integer type with a width of exactly 8 bits.
int64_t
is typedef
you can find that in <stdint.h>
in C
An 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.