从C标准来看,int至少为16位,长度至少为32位且长度至少为64位(如果有的话)(某些平台可能不支持)。只是想知道句子是否总是如此。
答案 0 :(得分:18)
没有。该标准仅定义了每种类型的最小范围。可以想象int可以有16位范围,但是48位填充,使其为64位(8字节,如果CHAR_BITS == 8),而long为32位(4字节)。
当然,这很愚蠢。但这并不是禁止的。
但请注意sizeof(char) == 1
,根据定义。所以sizeof(char) <= sizeof(
其他任何内容 )
。
答案 1 :(得分:6)
根据C Programming/Reference Tables,特别是Table of Data Types:
int≥16≥短的大小
长≥32≥int的大小
长长≥64≥长
正如bdonlan所指出的,这只是指值的范围,而不是内存中的大小(以字节为单位返回sizeof)。 C标准没有指定每种类型可以使用的内存大小,因此它留给实现。
答案 2 :(得分:2)
答案 3 :(得分:2)
至少对于ISO C ++,3.9.1中的标准[basic.fundamental] / 2:
明确定义了(出于明显的原因,long long
除外)
有四种有符号整数类型:“signed char”,“short int”,“int”和“long int”。在此列表中,每种类型提供的至少与存储一样多。列表中的前面那些。
请注意,这是关于存储,而不是值范围。这具体意味着sizeof
。