C:为什么整数作为长整数?

时间:2011-03-11 00:29:38

标签: c integer range variable-assignment long-integer

据我所知,整数在32,768到32,767之间。 长整数范围为2,147,483,648到2,147,483,647。 我加倍检查wikipedeia以确保。

现在的问题:

int a=2147483647;
printf("a: %d\n", a);

为什么这样做?如果我将1添加到2147483647然后它会打印垃圾,如果变量是一个长整数,则可以预期。但为什么它允许我在一开始就为整数分配一个长整数?

4 个答案:

答案 0 :(得分:11)

  

据我所知,整数在32,768到32,767之间。

这是不正确的。 int的范围至少为-32,767至32,767;它可能具有更大的范围,并且在大多数32位和64位平台上都可以。

通过查看int中定义的INT_MAXINT_MIN宏,您可以在平台上找到<limits.h>类型的范围。

答案 1 :(得分:5)

你知道的是错的。

与Java等其他语言不同,C中intlong的确切大小是实现定义的(具有设置限制)。显然,您使用的平台int为32位宽,但在其他平台上可能为16位,在某些平台上int为64位宽。

同样,在某些平台上,long为32位宽;在其他人身上它是64位宽。如果一个平台选择这样做,它可能会更宽。

答案 2 :(得分:4)

int的实际宽度通常取决于实现。您可以使用INT_MAX/INT_MIN标题中的limits.h常量来查找实际范围。

在x86机器上,int通常为4个字节,因此2 ^ 31-1确实是它可以拥有的最大值。

答案 3 :(得分:3)

sizeof(短)&lt; = sizeof(int)&lt; = sizeof(long)