【发布时间】:2014-07-28 18:47:12
【问题描述】:
我们可以有不同位宽的 int 大小的编译器吗?例如,以下是否可以用任何语言:
- 5位(不是8位的倍数)
- 超过 64 位
- 或不同于 16 位的东西
数据类型大小与寄存器大小有关系吗?
我记得在某处读到 int 的大小不能大于寄存器大小,但我想方便地参考一下。
【问题讨论】:
-
1.不,但不是因为这个原因; 2. 是的; 3. 是的(现在几乎所有桌面操作系统/编译器都将
int视为 32 位值,而不是 16。)。 “我在某处读到它的 int 大小不能大于寄存器大小” - 错了,也许某个邋遢的大学老师说过那张公报。 -
@TheParamagneticCroissant:为什么整数类型不能是 5 位?它在 C 中是非法的,它需要
INT_MAX >= 32767,但在其他一些语言中,整数类型不能为 5 位宽没有根本原因。如果您碰巧没有 5 位 CPU,它可能会非常低效。 (例如,Ada 允许type My_Integer is range -16 .. +15;,尽管它可能会以至少 8 位的形式存储。) -
@KeithThompson 是的,我错过了这是与语言无关的。 (为我辩护,
int往往是与 C 相关的类型,并且我所知道的没有int的语言 [例如 Java、C# 等] 具有 5 位ints。) -
这是一个很好的问题。 OP的最后几句话暗示这个问题可能是关于C的。他不是很清楚,所以任何好的答案都必须针对C和非C编译器。基思在这方面的回答非常好。
标签: compiler-construction int bit cpu-registers