sizeof(int)< = sizeof(long)< = sizeof(long long)总是如此?

时间:2009-08-06 16:42:35

标签: c types primitive-types

从C标准来看,int至少为16位,长度至少为32位且长度至少为64位(如果有的话)(某些平台可能不支持)。只是想知道句子是否总是如此。

4 个答案:

答案 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)

Practical C++ Programming

  

C ++保证存储&lt; = int &lt; =

仍在搜索很长

答案 3 :(得分:2)

至少对于ISO C ++,3.9.1中的标准[basic.fundamental] / 2:

明确定义了(出于明显的原因,long long除外)
  

有四种有符号整数类型:“signed char”,“short int”,“int”和“long int”。在此列表中,每种类型提供的至少与存储一样多。列表中的前面那些。

请注意,这是关于存储,而不是值范围。这具体意味着sizeof