从我所知道的整数范围是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那么它会打印垃圾,如果变量是一个长整数,则会出现一些垃圾。但为什么它允许我首先将一个长整数分配给一个整数?
从我所知道的整数范围是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那么它会打印垃圾,如果变量是一个长整数,则会出现一些垃圾。但为什么它允许我首先将一个长整数分配给一个整数?
从我所知道的整数范围是32,768到32,767。
这是不正确的。 int
的范围至少为-32,767至32,767;它可能有更大的范围,并且在大多数32位和64位平台上都有。
您可以通过检查<limits.h>
定义的INT_MAX
和INT_MIN
宏找出int
型平台上的范围。
+1,尽管实际上它的范围至少为+/- 32767,不一定包括-32768,以允许其他有符号表示愚蠢。 –
2011-03-11 00:33:16
@Steve:是的;我只是看着那个,因为我认为它必须支持有限的幅度,-32,768到32,767不会。谢谢。 – 2011-03-11 00:34:40
int
的实际宽度通常取决于实现。您可以使用limits.h
标题中的INT_MAX/INT_MIN
常量来找出实际范围。
在x86机器上,int
通常是4个字节,所以2^31-1的确是它的最大值。
“对于x> = 3的值,在x86机器上,int是......”。对于'286,'186和'086,“int”通常是2个字节。但是,除非OP有超过20年的计算机,否则您的陈述是正确的。 – 2011-03-11 03:27:23
你知道什么是错的。
与Java等一些其他语言不同,C中的int
和long
的确切大小是实现定义的(具有设置的限制)。显然,你使用的平台是32位宽,但在其他平台上它可能是16位,并且在某些平台上,它是64位宽。
同样,在一些平台上,long
是32位宽;在别人身上它是64位宽。如果一个平台选择这样做,它可能会更广泛。
的sizeof(短)< =的sizeof(int)的< =的sizeof(长)
你检查哪个维基百科条目? 32位机器上的整数应该落在-2b到+ 2b的范围内。 – 2011-03-11 00:32:54
http://en.wikipedia.org/wiki/Integer_%28computer_science%29虽然我可能读错了。我有这样的想法,有什么大小的int,long int,float应该是一个标准。但是,这并不意味着一个程序在不同的处理器上可能会有很大的不同。有人会如何照顾这个程序员? – Pithikos 2011-03-11 01:03:51