What's the difference between long long and long? And they both don't work with 12 digit numbers (600851475143), am I forgetting something?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
What's the difference between long long and long? And they both don't work with 12 digit numbers (600851475143), am I forgetting something?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
Going by the standard, all that's guaranteed is:
int
must be at least 16 bitslong
must be at least 32 bitslong long
must be at least 64 bitsOn major 32-bit platforms:
int
is 32 bitslong
is 32 bits as welllong long
is 64 bitsOn major 64-bit platforms:
int
is 32 bitslong
is either 32 or 64 bitslong long
is 64 bits as wellIf you need a specific integer size for a particular application, rather than trusting the compiler to pick the size you want, #include <stdint.h>
(or <cstdint>
) so you can use these types:
int8_t
and uint8_t
int16_t
and uint16_t
int32_t
and uint32_t
int64_t
and uint64_t
You may also be interested in #include <stddef.h>
(or <cstddef>
):
size_t
ptrdiff_t
long long
does not exist in C++98/C++03, but does exist in C99 and c++0x.
long
is guaranteed at least 32 bits.
long long
is guaranteed at least 64 bits.
To elaborate on @ildjarn's comment:
And they both don't work with 12 digit numbers (600851475143), am I forgetting something?
The compiler looks at the literal value 600851475143
without considering the variable that you're assigning it to/initializing it with. You've written it as an int
typed literal, and it won't fit in an int
.
Use 600851475143LL
to get a long long
typed literal.
Your C++ compiler supports long long, that is guaranteed to be at least 64-bits in the C99 standard (that's a C standard, not a C++ standard). See Visual C++ header file to get the ranges on your system.
Recommendation
For new programs, it is recommended that one use only bool, char, int, and double, until circumstance arises that one of the other types is needed.
Depends on your compiler.long long is 64 bits and should handle 12 digits.Looks like in your case it is just considering it long and hence not handling 12 digits.