2011-03-11 21 views
2

从我所知道的整数范围是32,768到32,767。 长整数的范围是2,147,483,648到2,147,483,647。 我doubledchecked wikipedeia来确保。C:为什么整数作为长整数?

的现在问题:

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

为什么这项工作?如果我将1加到2147483647那么它会打印垃圾,如果变量是一个长整数,则会出现一些垃圾。但为什么它允许我首先将一个长整数分配给一个整数?

+0

你检查哪个维基百科条目? 32位机器上的整数应该落在-2b到+ 2b的范围内。 – 2011-03-11 00:32:54

+0

http://en.wikipedia.org/wiki/Integer_%28computer_science%29虽然我可能读错了。我有这样的想法,有什么大小的int,long int,float应该是一个标准。但是,这并不意味着一个程序在不同的处理器上可能会有很大的不同。有人会如何照顾这个程序员? – Pithikos 2011-03-11 01:03:51

回答

11

从我所知道的整数范围是32,768到32,767。

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

您可以通过检查<limits.h>定义的INT_MAXINT_MIN宏找出int型平台上的范围。

+1

+1,尽管实际上它的范围至少为+/- 32767,不一定包括-32768,以允许其他有符号表示愚蠢。 – 2011-03-11 00:33:16

+0

@Steve:是的;我只是看着那个,因为我认为它必须支持有限的幅度,-32,768到32,767不会。谢谢。 – 2011-03-11 00:34:40

4

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

在x86机器上,int通常是4个字节,所以2^31-1的确是它的最大值。

+0

“对于x> = 3的值,在x86机器上,int是......”。对于'286,'186和'086,“int”通常是2个字节。但是,除非OP有超过20年的计算机,否则您的陈述是正确的。 – 2011-03-11 03:27:23

5

你知道什么是错的。

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

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

3

的sizeof(短)< =的sizeof(int)的< =的sizeof(长)

相关问题