在 C 和 C++ 中,内置整数类型的大小取决于实现。但是它们是否有任何预定义的预期含义,例如 int 应该代表机器字长等?
3 回答
从历史上看,int
它应该是机器硬件上最“自然”的整数类型;显然,“自然”有点主观,但在过去,它通常很明显,而且无论如何都没有那么多整数类型可用,所以制作与 a或 aint
相同的大小是正常的过程。long
short
由于各种原因,大多数 64 位平台制作int
32 位。人们很容易争辩说这不是最“自然”的长度,但人们希望 32 位整数成为默认值,并且int
显然是默认整数类型。对于架构而言,它是否是最自然的成为次要的,它是否是所需的默认大小。
关于字长:从历史上看,这是最自然的,但在很多方面,现代机器上的“字长”是什么意思尚不清楚:您可以进行算术运算的最大尺寸?进出内存的总线大小?等等。传统上,“字长”被用来表示内部寄存器的宽度(当机器有它们时),或者基本总线传输的大小。(8088 通常被称为 8 位机器,尽管它有 32 位寄存器。)今天我不会过多地解释它。
有一些措辞,但不是很严格:
声明为字符 (char) 的对象应足够大以存储实现的基本字符集的任何成员。
有五种标准有符号整数类型:“signed char”、“short int”、“int”、“long int”和“long long int”。在此列表中,每种类型提供的存储空间至少与列表中它前面的类型一样多。(...)普通整数具有执行环境架构所建议的自然大小,提供其他有符号整数类型以满足特殊需要。
也没有关于浮动尺寸的严格建议:
有三种浮点类型:float、double 和 long double。double 类型提供的精度至少与 float 一样,long double 类型提供的精度至少与 double 一样。(...)浮点类型的值表示是实现定义的。
与 Java 不同,C 被设计为平台支持者,而不是独立平台。与使用最适合给定平台的数据类型大小相比,跨平台兼容性的优先级要低得多。因此,整数类型没有由 C 标准指定,并且完全是特定于平台的