【问题标题】:Is C++11's long long really at least 64 bits?C++11 的 long long 真的至少 64 位吗?
【发布时间】:2012-04-07 08:49:29
【问题描述】:

它说on wikipediain Stroustrup's FAQ 类型long long 至少和int 一样长,并且不少于64 位。我一直在查看 C++11 标准 §3.9.1 基本类型部分,但找不到任何对 64 位的引用。我所能找到的只是它至少与long int 一样长,至少与int 一样长。标准将long long 列为标准 整数类型,而不是扩展 类型,所以我想知道long long 至少包含64 位的断言是否是真的。如果是,在哪里说明?
请注意,我说的只是 C++11 标准 long long

【问题讨论】:

  • 标准当然是对的。它只是告诉您各种类型之间的大小差异是什么,例如 short、int、long、long long。实际大小(即是否为 64 位)取决于平台。由于 C++ 编译器可用于各种平台。您可以在特定的头文件中找到特定于平台、编译器的实际大小。
  • @ErvinBosenbacher:该标准还为内置类型指定了最小大小。确切的类型是实现定义的,是的,但实现不能只是组成数字
  • @jalf:谢谢,是的,没错 :) Limits.h 是文件。
  • @ErvinBosenbacher 我引用的参考文献明确提到了 64 位,无论平台如何,这似乎很奇怪,这就是我问这个问题的原因。
  • 好的。感谢您的澄清。

标签: c++ c++11 long-long


【解决方案1】:

C++ 标准为此引用了 C 标准,请参阅 [c.limits]。 LLONG_MAX<climits> 中定义,与C 的<limits.h>LLONG_MAX 含义相同。这就是 C 必须说的:

5.2.4.2.1 整数类型的大小<limits.h>

下面给出的值应替换为适用于#if 预处理指令的常量表达式。 [...] 它们的实现定义值的大小(绝对值)应等于或大于所示值,且符号相同。

[...]

--long long int 类型对象的最大值

LLONG_MAX +9223372036854775807 //263 -1

必须能够表示值 9223372036854775807 的有符号类型需要 64 位或更多位。

【讨论】:

  • 谢谢!我对C99不是很熟悉。该标准是否定义了在 32 位或 16 位平台上发生的情况?
  • @juanchopanza 它通过不这样做来实现:long long 支持不是可选的,所以如果硬件本身不能执行 64 位操作,它必须以某种方式模拟它们。与 16 位平台上的 long 支持相同。
  • @herohuyongtao 我很欣赏编辑,并进行了一些调整以使其尽可能接近标准中使用的格式。
猜你喜欢
  • 2013-09-22
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2013-08-01
  • 1970-01-01
  • 2011-05-18
  • 2010-09-27
相关资源
最近更新 更多