“long int”、“long long”数据类型

Posted

技术标签:

【中文标题】“long int”、“long long”数据类型【英文标题】:"long int", "long long" Data Types 【发布时间】:2010-04-15 07:43:31 【问题描述】:

这些新数据类型的用途是什么?我通常只会使用“int”或“long”,但为什么会存在这些?它们带来了什么新的功能或目的?

【问题讨论】:

它们已经存在了很长一段时间了...... long long int 等同于long long ;) 【参考方案1】:

long int一直是long的全称,只是很少使用。

long long 已经存在了一段时间(在最后一个 C 标准中),并且保证至少 64 位大小(long 只保证 32 位)。

【讨论】:

【参考方案2】:

嗯,它们带来了更大范围的整数,因此计算机可以轻松处理,例如比尔盖茨的纳税申报表。

顺便说一句,long int 一点也不新鲜,但大多数人只是使用较短的变体long

在即将发布的新 ISO 标准草案中寻找这些后续内容:

longer long      - slightly larger than a long long (this was initially put
                   forward as "long long long" but the ISO committee barfed).
even longer long - bigger yet.
stupendous long  - should keep us going for a while.

幽默>

【讨论】:

反之,有机会实现short long。这具有不引入新关键字的优点。他们还可以引入short short 作为保证字节长度数量的一种方式,释放char 成为完全表达本地字符集所必需的任何东西...... face> c1x 为我们提供了 uint8_t (或类似的东西),用于具有 8 位类型(以及其他特定位宽)的实现。我确实喜欢 RGB 值的 24 位短长的想法。 echo 'long long long x;' | gcc -c -x c - @Donal:我实际上认为short longint24_t 之类的东西很有用,它是嵌入式和低级编程中经常需要的一种类型——例如C/C++ 擅长什么。 @Joe:我原以为那会是long short。 ;-)【参考方案3】:

嗯,显然“long long”比“long”还要长。 :)

不同之处是特定于平台的:当“long”是 32 位时,“long long”可以是 64 位整数,也可以都是 64 位。至于“long int”,这只是“long”的说法,没有双关语。

【讨论】:

【参考方案4】:

可能使 C++ 与支持它的 C99 保持一致(并使标准与编译器实际支持的内容保持一致,因为它们中的大多数已经支持 long long)。

【讨论】:

有时标准落后于现有的标准,橡皮图章的常见做法(希望在此过程中不会出现太多令人讨厌的事情)。【参考方案5】:

long int 只是long 的完整形式,与unsigned long int 等不同。这在 C++0x 中并不新鲜。

long long 在今天的编译器中很常见;为了兼容性,即使在 64 位架构上,longint 都是 32 位的。 long long 在这种情况下指定 64 位;它是 C99 的一部分,并且根据该标准必须至少为 64 位。

您还可以使用long long long 在某些编译器上获取 128 位数据类型;其他编译器使用属性提供此类数字(例如,GCC 有 __attribute__((__mode__(__TI__))))),并且大多数编译器都有一个 <limits.h>__int128_t/__uint128_t

【讨论】:

【参考方案6】:

如前所述,这些类型并不新鲜。您可能对this overview 感兴趣。作为补充说明,如果对类型感到困惑,您还可以使用intn_t types,它具有更清晰的“含义”。

【讨论】:

以上是关于“long int”、“long long”数据类型的主要内容,如果未能解决你的问题,请参考以下文章

c语言long long(int64)和int(int32)之间如何安全的互相转换?

long long int I64d

long long int型使用

如何将 unsigned long long int 转换为 unsigned char*?

题目1067:n的阶乘--------long long int

如何使用 printf 格式化 unsigned long long int?