1

在 C 和 C++ 中,内置整数类型的大小取决于实现。但是它们是否有任何预定义的预期含义,例如 int 应该代表机器字长等?

4

3 回答 3

5

从历史上看,int它应该是机器硬件上最“自然”的整数类型;显然,“自然”有点主观,但在过去,它通常很明显,而且无论如何都没有那么多整数类型可用,所以制作与 a或 aint相同的大小是正常的过程。longshort

由于各种原因,大多数 64 位平台制作int32 位。人们很容易争辩说这不是最“自然”的长度,但人们希望 32 位整数成为默认值,并且int显然是默认整数类型。对于架构而言,它是否是最自然的成为次要的,它是否是所需的默认大小。

关于字长:从历史上看,这是最自然的,但在很多方面,现代机器上的“字长”是什么意思尚不清楚:您可以进行算术运算的最大尺寸?进出内存的总线大小?等等。传统上,“字长”被用来表示内部寄存器的宽度(当机器有它们时),或者基本总线传输的大小。(8088 通常被称为 8 位机器,尽管它有 32 位寄存器。)今天我不会过多地解释它。

于 2012-10-22T16:04:35.920 回答
4

有一些措辞,但不是很严格:

声明为字符 (char) 的对象应足够大以存储实现的基本字符集的任何成员。

有五种标准有符号整数类型:“signed char”、“short int”、“int”、“long int”和“long long int”。在此列表中,每种类型提供的存储空间至少与列表中它前面的类型一样多。(...)普通整数具有执行环境架构所建议的自然大小,提供其他有符号整数类型以满足特殊需要。

也没有关于浮动尺寸的严格建议:

有三种浮点类型:float、double 和 long double。double 类型提供的精度至少与 float 一样,long double 类型提供的精度至少与 double 一样。(...)浮点类型的值表示是实现定义的。

于 2012-10-22T15:53:46.123 回答
1

与 Java 不同,C 被设计为平台支持者,而不是独立平台。与使用最适合给定平台的数据类型大小相比,跨平台兼容性的优先级要低得多。因此,整数类型没有由 C 标准指定,并且完全是特定于平台的

于 2012-10-22T16:06:24.573 回答