数据类型的最小大小是以位还是字节为单位定义的?

Is the minimum size of datatypes defined in bits or bytes?

我知道 char 中的位数是在 CHAR_BIT 中从 <limits.h> 定义的,并且 sizeof(char) 始终为 1。但是其他基本数据类型呢,它们的大小是相对于 CHAR_BIT 定义的吗?

例如,C 中 int 的最小大小定义为 16 位 on Wikipedia, but on other sites like GeeksforGeeks 最小大小定义为 2 个字节。哪个定义是正确的,一个字节不一定等于8位。

类型值的最小要求范围是用数字定义的,而不是根据位或字节。 5.2.4.2.1 Sizes of integer types <limits.h> 说有这样的定义:

  • minimum value for an object of type short int
    SHRT_MIN -32767 // -(215 - 1)
  • maximum value for an object of type short int
    SHRT_MAX +32767 // 215 - 1

所有类型定义恰好与使用 8 位字节的倍数的二进制补码或符号幅度表示来实现类型相匹配。但由于它们只是最小值,因此不需要此类表示。

Is the minimum size of datatypes defined in bits or bytes?

它主要由 C 规范属性和 CHAR_BIT 的组合定义。 CHAR_BIT >= 8.

int 具有最小范围 [-32767... 32767],要求至少 16 位对其进行编码。

与常见的CHAR_BIT == 8,即16位或2字节。

与常见的CHAR_BIT == 16,即16位或1个“字节”。 byte 在此实现中为 16 位。

与常见的CHAR_BIT == 64,即64位或1个“字节”。 64 位,因为没有类型小于 char.


(u)intN_t 这样的精确大小的整数类型实际上是由位大小定义的。它们也有 min/max 范围值,但没有填充和 2 的补码要求有效地由 定义。注意:这些是可选类型。


关于最小 floating point 位大小的一些深奥的想法。