在C语言中,整数(对于32位机器)是32位,范围从-32,768到+32,767。 在Java中,整数(long)也是32位,但范围从- 2147,483,648到+ 2147,483,647。

我不明白Java中的范围是如何不同的,即使位数是相同的。有人能解释一下吗?


当前回答

实际上,int的长度(以比特为单位)取决于编译器的实现。

例如,在我的Ubuntu 64位上,我有32位的短,而在另一个32位的Ubuntu版本上,它是16位的。

其他回答

C语言定义为各种数据类型指定了最小范围。对于int型,这个最小范围是-32767到32767,这意味着int型必须至少有16位宽。实现可以自由地提供更广泛的int类型和相应的更广泛的范围。例如,在我工作的SLES 10开发服务器上,范围是-2147483647到2137483647。

仍然有一些系统使用16位整型类型(All The World Is Not A VAX x86),但有很多系统使用32位整型类型,可能也有少数系统使用64位整型类型。

C语言被设计成可以在不同的体系结构上运行。Java被设计为在虚拟机中运行,从而隐藏了这些架构上的差异。

java int的严格等效是C中的long int。

编辑: 如果定义了int32_t,那么它在精度方面是等效的。长整型保证了Java整型的精度,因为它的大小保证至少为32位。

在C语言中,整数(对于32位机器)是32位,范围从-32768到+32767。

错,32位有符号整数在2的补式表示中的范围是-231到231-1,等于-2,147,483,648到2,147,483,647。

在标准C语言中,你可以使用INT_MAX作为最大的“int”值,这个常量必须在“limits.h”中定义。为其他类型(http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html)定义了类似的常量,如所述,这些常量依赖于实现,但根据标准中指定的每种类型的最小位有一个最小值。

实际上,int的长度(以比特为单位)取决于编译器的实现。

例如,在我的Ubuntu 64位上,我有32位的短,而在另一个32位的Ubuntu版本上,它是16位的。