• Uncategorized

About c++ : Whats-the-difference-between-long-long-and-long

Question Detail

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;
}

Question Answer

Going by the standard, all that’s guaranteed is:

  • int must be at least 16 bits
  • long must be at least 32 bits
  • long long must be at least 64 bits

On major 32-bit platforms:

  • int is 32 bits
  • long is 32 bits as well
  • long long is 64 bits

On major 64-bit platforms:

  • int is 32 bits
  • long is either 32 or 64 bits
  • long long is 64 bits as well

If 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.

http://www.somacon.com/p111.php

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.

You may also like...

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.