1

与其他类型不同:“int”、“boolean”、“double”等。甚至自定义类,也只有一个词。它们的类型只有一个词,但是,只有整数使用两个词;它如何以及为什么会如此特别?

4

5 回答 5

3

来自:通往 64 位的漫漫长路 - John R. Mashey | 2006 年 10 月 1 日 - 主题:系统演进

“Algol 68 在 1968 年启发了long long,并且在某个时候它也被添加到了 GNU C 中。”

摘录:年表:多个互锁线程

  • 1964 IBM S/360:32位,具有 24 位寻址(总共 16 MB)的真实(核心)内存。
  • 1968 年 Algol 68:包括长长。[ long long for int还有 long long real、compl、bitsbytes ]
  • 1970 DEC PDP-11/20:16 位、16 位寻址(总共64 KB)。IBM S/370 系列:虚拟内存,24 位地址,但允许多个用户地址空间。
  • ...
  • 1984 年摩托罗拉 MC68020:32位;32位寻址。
  • 1984 C:Amdahl UTS(32位 S/370)使用 long long,特别是对于大文件指针。
  • 1984 C:Convex(64位矢量微型超级计算机)使用 long long 表示64位整数。
  • 1986 Intel:80386,32,支持 8086 模式。
  • ...
  • 1989 ANSI C(“C89”):工作始于 1983 年,ANSI X3J11。
  • 1992 SGI:推出第一台64位微型处理器 (MIPS R4000);仍在运行32位操作系统。64位 C 工作组:讨论各种模型(LP64ILP64LLP64),几乎没有达成一致。
  • 1992 年 12 月:推出64位 Alpha 系统,运行64位操作系统; LP64
  • 1994 SGI:在 Power Challenge 上运送 IRIX 6( 64 / 32操作系统;ILP32LL + LP64 );客户购买 4 GB+ 内存,使用它。DEC:在 DEC 7000 SMP 中发货 4 GB+(可能稍早一些)。
  • 1995 Sun UltraSPARC:64 / 32位硬件,仅32位操作系统。HAL Computer 的SPARC64:使用C 语言的ILP64模型。
  • 1995 年大文件峰会:将64位接口编码为大于 2 GB 的文件,即使在32位系统(ILP32LL+ LP64)中也是如此。
  • 1994 Aspen group:支持C 的LP64模型,以便 Unix 供应商保持一致。
  • 1996 HP:发布 PA-RISC 2.0,64位。
  • ...

结束提取。

注意:标准Algol68↗</a> 没有用于unicode/UTF16 的 long char ,也没有long long char,但是(方便地)char的大小不需要与byte的大小相同。有时 - “传统上” -字符小于 8 位,例如 6 位ASCIIGOST)或 7 位(例如ASCII和现在GSM_03.38

于 2013-05-15T00:13:51.460 回答
2

C 类型的命名方案最终似乎继承自古老的 Algol,它允许在诸如intor real(它是浮点数的名称)之类的类型之前使用任意数量的“短”或“长”前缀。当然,他们的解释是依赖于实现的,不能保证long long long int实际上比long int.

C 继承了前缀(至少对于整数来说,奇怪的是,他们为浮点数选择了更特别的东西),但当时并没有看到允许迭代它们的必要性。而且因为 C 在很多方面都相当松懈,所以它也允许intlong int.

随着 64 位机器的出现,在这个方案中只需要少量大小以及因此需要单个前缀的假设被打破,编译器开始支持long long. 重新发现此方案的部分原因可能是它不需要破坏新名称或关键字。C99 然后将这种类型作为标准的官方部分,C++ 后来继承了它。

于 2013-03-11T08:09:47.400 回答
2

实际上,正如我在“通往 64 位的漫漫长路”中所写

“大约在 1984 年的某个时候,Amdahl UTS 和 Convex 为 64 位整数添加了 long long,前者在 32 位架构上,后者在 64 位架构上。UTS 尤其将其用于长文件指针,这是相同的动机之一long 在 PDP-11 Unix (1977) 中。Algol 68 在 1968 年启发了 long long,它也被添加到 GNU C 中。许多人斥责这种语法,但至少它不再使用保留关键字。

我不知道 GCC 何时添加了 long long,但自从 GCC 1.0 于 1987 年发布以来,其他这些都更早。

实际上,这实际上是由“漫漫长路”中描述的 1992 年工作组决定的。

于 2014-07-28T06:23:25.333 回答
1

采用 C++ 和 C 标准的原因long long是 GCC 多年来一直在使用它,尽管它固有的丑陋,但现有的做法还是胜出。至于为什么 GCC 选择这个名字,你得问问他们。<g>.

于 2013-03-11T14:20:59.550 回答
0

long long区别于long,通常只有 4 个字节(32 位)。

long是一个修饰符,可用于许多原始类型来修改它们。

于 2013-03-11T04:55:17.677 回答