long long和long之间有什么区别

问题描述 投票:29回答:5

long long和long之间有什么区别?而且它们都不使用12位数字(600851475143),我忘了什么吗?

#include <iostream>
using namespace std;

int main(){
  long long a = 600851475143;
}
c++ int long-integer
5个回答
53
投票

按照标准,所保证的是:

  • int必须至少为16位
  • long必须至少为32位
  • [long long必须至少为64位]

在主要的32位平台上:

  • [int是32位
  • long也是32位
  • [long long是64位

在主要的64位平台上:

  • [int是32位
  • long是32或64位
  • long long也是64位

如果特定应用程序需要特定的整数大小,而不是信任编译器选择所需的大小,请选择#include <stdint.h>(或<cstdint>),以便可以使用以下类型:

  • [int8_tuint8_t
  • [int16_tuint16_t
  • [int32_tuint32_t
  • [int64_tuint64_t

您可能对#include <stddef.h>(或<cstddef>)也有兴趣:

  • size_t
  • ptrdiff_t

7
投票

[long long在C ++ 98 / C ++ 03中不存在,但在C99和c ++ 0x中确实存在。

long确保至少为32位。

long long至少保证有64位。


2
投票

详细阐述@ildjarn的评论:

而且它们都不使用12位数字(600851475143),我忘了什么吗?

编译器查看文字值600851475143 不考虑您为其分配/初始化变量的变量。您已将其编写为int类型的文字,但它不适合int

使用600851475143LL获得long long类型的文字。


0
投票

您的C ++编译器支持long long,在C99标准(即C标准,不是C ++标准)中,保证至少为64位。请参阅Visual C ++头文件以获取系统上的范围。

推荐

对于新程序,建议仅使用bool,char,int和double,直到出现需要其他类型之一的情况。

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


0
投票

取决于您的编译器。long long是64位,应处理12位数字。看起来像您的情况,它只是考虑使用long,因此不处理12位数字。

© www.soinside.com 2019 - 2024. All rights reserved.