C标准规定sizeof(char)
为1,无论它实际占据多少位。
如果这些数据类型不同,其他数据类型是否以字节或字符作为度量单位?
基本上,假设CHAR_BIT
为16,那么sizeof(int16_t)
是否等于1或2?
CHAR_BIT
为16且存在int16_t
,则sizeof(int16_t) == 1
。因为在C语言中,每个东西都必须以字节为单位进行测量(并且在此系统上,每个字节将是16位…这就是为什么术语 "八位组" 比 "字节" 更精确的原因),所以int8_t
类型将不存在。short
、int
和long
都具有相同的大小,比如64位。类型的大小没有限制;它们只需要能够表示最小范围的值。例如,一个平台拥有所有基本类型都是64位宽度的是完全合法的,每个类型的sizeof
都将是1
。
由于数组需要连续存储,并且相邻的数组元素必须可以被访问而不需要额外的写操作,因此一个平台可能需要选择“大型char
”来适应它可以独立寻址的最小内存单元。
int_least16_t
,但不适用于 int16_t
,我理解正确吗? - user529758int16_t
是一个typedef,而不是一种类型。如果存在适当的类型,则进行定义。 - Kerrek SBint_least16_t
可以) - user529758
sizeof(T) * CHAR_BIT
**。对于允许有填充位的类型(不包括unsigned char
或指定宽度和大小的类型),您需要检查其范围限制。 - Peter Cordes