【问题标题】:What's the difference between long long and longlong long 和 long 和有什么不一样
【发布时间】:2011-06-24 01:35:45
【问题描述】:

long long 和 long 有什么区别?而且它们都不适用于 12 位数字 (600851475143),我是不是忘记了什么?

#include <iostream>
using namespace std;

int main(){
  long long a = 600851475143;
}

【问题讨论】:

  • 使 long long a = 600851475143LL; 可以工作。
  • @ildjarn 为什么我需要使用 (LL) 后缀来指定格式,而我在声明变量时已经用 (long long) 指定了格式?

标签: c++ int long-integer


【解决方案1】:

按照标准,所有可以保证的是:

  • 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 &lt;stdint.h&gt;(或&lt;cstdint&gt;)这样您就可以使用这些类型:

  • int8_tuint8_t
  • int16_tuint16_t
  • int32_tuint32_t
  • int64_tuint64_t

您可能还对#include &lt;stddef.h&gt;(或&lt;cstddef&gt;)感兴趣:

  • size_t
  • ptrdiff_t

【讨论】:

  • “long 是 32 位还是 64 位”是什么意思?它可以改变它的位吗?
  • @Hikari Iwasaki:这取决于目标。例如,如果你在 Windows 上编译,它可能是 32 位,而在 Linux x86-64 上,它可能是 64 位。类型在运行时不会改变大小。
  • 而且 g++ 甚至还有一个__int128 类型,用来扩展列表...
【解决方案2】:

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

long 保证至少 32 位。

long long 保证至少为 64 位。

【讨论】:

    【解决方案3】:

    详细说明@ildjarn 的评论:

    而且它们都不适用于 12 位数字 (600851475143),我是不是忘记了什么?

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        推荐

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-07
          • 2013-05-19
          • 2021-05-07
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          相关资源
          最近更新 更多