“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 long
对int24_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 位架构上,long
和 int
都是 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)之间如何安全的互相转换?
如何将 unsigned long long int 转换为 unsigned char*?