据我所知,整数在32,768到32,767之间。 长整数范围为2,147,483,648到2,147,483,647。 我加倍检查wikipedeia以确保。
现在的问题:
int a=2147483647;
printf("a: %d\n", a);
为什么这样做?如果我将1添加到2147483647然后它会打印垃圾,如果变量是一个长整数,则可以预期。但为什么它允许我在一开始就为整数分配一个长整数?
答案 0 :(得分:11)
据我所知,整数在32,768到32,767之间。
这是不正确的。 int
的范围至少为-32,767至32,767;它可能具有更大的范围,并且在大多数32位和64位平台上都可以。
通过查看int
中定义的INT_MAX
和INT_MIN
宏,您可以在平台上找到<limits.h>
类型的范围。
答案 1 :(得分:5)
你知道的是错的。
与Java等其他语言不同,C中int
和long
的确切大小是实现定义的(具有设置限制)。显然,您使用的平台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)