sizeof(int)<= sizeof(long)<= sizeof(long long)总是如此?
从C标准来看,int具有至少16位,长度至少为32位且长度至少为64位(如果有的话)(某些平台可能不支持)。 只是想知道作为标题的句子是否总是正确的。
不可以。标准仅定义了每种类型的最小范围。 可以想象int可以具有16位范围,但是48位填充,使其为64位(8字节,如果CHAR_BITS == 8),而长为32位(4字节)。
当然,这很愚蠢。 但这并不是禁止的。
但是,请注意, sizeof(char) == 1
,根据定义。 所以sizeof(char) <= sizeof(
其他任何东西 )
。
是的,它总是如此。
为了澄清,在这里,我熟悉的现实总是如此。 如果你想赢得一个赌注,你可以参考bdonlan的学习答案,但是如果你遇到过sizeof(int) > sizeof(long)
你可以让我的许可给实施者一个好的打击。
根据C编程/参考表 ,特别是数据类型表 :
int≥16≥短的大小
长度≥32≥int的大小
长长≥64尺寸长
正如bdonlan指出的那样,这只涉及值的范围,而不是内存中的大小(以字节为单位返回sizeof)。 C标准没有指定每种类型可以使用的内存大小,因此它留给实现。
实用的C ++编程说明了这一点
C ++保证短存储<= int <= long
还在寻找很久 。
至少对于ISO C ++,这在3.9.1 [basic.fundamental] / 2中的标准中是明确定义的(除了明显的原因除外long long
):
有四种带符号的整数类型:“signed char”,“short int”,“int”和“long int”。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间 。
请注意,这是存储而不是值范围。 这特别意味着sizeof
。