默认情况下,int是否为C中的long int?

时间:2010-10-15 21:26:09

标签: c

为什么我发现int和long int的大小显示为4个字节?是int默认是long int吗?

8 个答案:

答案 0 :(得分:9)

sizeof(short) <= sizeof(int) <= sizeof(long)

这就是你所能依靠的。其余的完全取决于实施。在DOS的旧时代,16位编译器通常有sizeof(int)== sizeof(short)== 2.在32位系统上,sizeof(int)通常等于sizeof(long)== 4.通常拇指,int是处理器可以用最快的速度工作的类型。没有例外的规则......

编辑:删除了第二条规则sizeof(short) < sizeof(long),它不属于C标准。在某些平台上,sizeof(short)实际上可能等于sizeof(long)

答案 1 :(得分:7)

int的大小既不保证为4,也不等于long int的大小。换句话说:那是完全实现的定义。

答案 2 :(得分:4)

他们碰巧有相同的尺寸。

This post总结了数据类型在大小和范围方面的预期结果。

答案 3 :(得分:2)

不,intlong的大小不一定相同,即使编译器中的情况恰好如此。

C标准为每种数据类型定义了最小大小,但实际大小取决于实现。例如,某些系统具有2字节int和4字节long s,而其他系统可能具有4字节int和8字节long s。

答案 4 :(得分:2)

标准授权的唯一保证(假设下面的所有表达式都是sizeof (type)而不仅仅是type

char <= short <= int <= long <= long long

所以你可以拥有

char == short == int == long == long long /* Cray?? */
char <  short <  int == long <  long long /* Windows 32 bit */
char <  short <  int <  long == long long /* Linux 64 bit */

答案 5 :(得分:0)

标准的唯一保证是sizeof(long)&gt; = sizeof(int)。

在16位处理器的旧时代,int为2字节的情况并不少见。

答案 6 :(得分:0)

C标准对标准整数类型的转换等级及其精度做出以下保证:

_Bool (1) <  char (8)
          <= short (16)
          <= int (16)
          <= long (32)
          <= long long (64)

如果是_Bool,精度是准确的,而其他是最小值。可能还有其他所谓的扩展整数类型。

char是内存的最小可寻址单位,所以sizeof (char) == 1,无论其精度如何(由CHAR_BIT给出)。其他标准整数类型的大小是imlementation-defined。我怀疑sizeof (_Bool)也会1,但我在标准中找不到任何可以保证这一点的内容......

答案 7 :(得分:0)

在现代32位操作系统上,int和long通常是32位,或ILP32(整数,长,指针),而在64位操作系统上,LP64很常见,暗示int是32位。长的是64位几乎到处都是,可能也可能不长。

如果你的环境使用那组类型,通常会有你可以测试的宏,比如ILP32, ILP32 等。