如果CHAR_BIT!= 8,其他类型的大小是多少?

时间:2014-01-12 20:49:05

标签: c sizeof

C标准要求sizeof(char) 1 ,无论实际需要多少位。
是否其他数据类型是根据字节字符测量的,如果它们不相同的话? 基本上,假设CHAR_BIT 16 sizeof(int16_t)是否等于 1 2

3 个答案:

答案 0 :(得分:13)

  

基本上,假设CHAR_BIT为16,sizeof(int16_t)将等于1或2

对象的大小(由sizeof运算符产生)以字节为单位测量,C中的字节具有CHAR_BIT位。

  

(C99,6.2.6.1p4)“存储在任何其他对象类型的非位字段对象中的值由nx个CHAR_BIT位组成,其中n是该类型对象的大小,以字节为单位。”

int16_t类型(如果存在)的宽度恰好为16位且没有填充。这意味着如果CHAR_BIT == 16,则sizeof (int16_t) == 1

答案 1 :(得分:12)

如果CHAR_BIT为16且int16_t存在,则为sizeof(int16_t) == 1int8_t类型不存在,因为C中的所有内容都必须以字节为单位进行测量(在这个系统中,每个字节都是16位......这就是为什么术语" octet"更多精确到"字节")。

有DSP系统和旧的超级计算机(早期的Cray系统)shortintlong都有相同的大小,比如64位。

答案 2 :(得分:2)

对类型的大小没有限制;它们只需要能够代表值的最小范围。例如,对于一个平台来说所有它的基本类型是64位宽,并且每个sizeof都是1,这是完全合法的。

由于数组需要连续存储,并且必须可以访问相邻的数组元素而不会发明写入,因此平台可能必须选择“大char s”以适应它可以独立寻址的最小内存单元。