What's the difference between long long and long

一笑奈何 提交于 2019-11-26 20:23:16

问题


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

回答1:


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

Going by the standard:

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

Correct me if I'm wrong.

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



回答2:


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.




回答3:


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.




回答4:


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




回答5:


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.



来源:https://stackoverflow.com/questions/6462439/whats-the-difference-between-long-long-and-long

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!