整数的最大值

时间:2013-02-21 14:37:41

标签: java c integer max bit

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

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

12 个答案:

答案 0 :(得分:341)

C 中,语言本身并不确定某些数据类型的表示形式。它可能因机器而异,在嵌入式系统上int可以是16位宽,但通常是32位。

唯一的要求是short int< = int< = long int的大小。此外,还建议 int代表处理器的原生容量

所有类型都已签名。 unsigned修饰符允许您将最高位用作值的一部分(否则它将保留给符号位)。

以下是可能的数据类型的可能值的简短表格:

          width                     minimum                         maximum
signed    8 bit                        -128                            +127
signed   16 bit                     -32 768                         +32 767
signed   32 bit              -2 147 483 648                  +2 147 483 647
signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
unsigned  8 bit                           0                            +255
unsigned 16 bit                           0                         +65 535
unsigned 32 bit                           0                  +4 294 967 295
unsigned 64 bit                           0     +18 446 744 073 709 551 615

Java 中,Java Language Specification确定数据类型的表示形式。

顺序为:byte 8位,short 16位,int 32位,long 64位。所有这些类型都是签名,没有未签名的版本。但是,位操作会将数字视为无符号(即正确处理所有位)。

字符数据类型char是16位宽,无符号,并使用UTF-16编码保存字符(但是,可以分配char任意一个无符号16位整数,表示无效的字符代码点)

          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535

答案 1 :(得分:70)

  

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

错误。 2位补码表示的32位有符号整数的范围为-2 31 到2 31 -1,等于-2,147,483,648到2,147,483,647。

答案 2 :(得分:18)

32位整数,范围从-2,147,483,648到2,147,483,647。但是,您在32位计算机上的事实并不意味着您的C编译器使用32位整数。

答案 3 :(得分:13)

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

还有一些系统使用16位int类型(全世界 A VAX x86),但有很多使用32位int类型,也许少数使用64位。

C语言旨在在不同的体系结构上运行。 Java被设计为在隐藏这些架构差异的虚拟机中运行。

答案 4 :(得分:7)

海报将他们的java类型混淆了。 在java中,他的C in是一个简短的: 短(16位)= -32768到32767 int(32位)= -2,147,483,648至2,147,483,647

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 5 :(得分:6)

这是因为在C位 - 32位机器上的整数并不意味着32位用于存储它,它也可能是16位。这取决于机器(取决于实现)。

答案 6 :(得分:5)

在C中,int的严格等价物是long int

编辑: 如果定义了int32_t,则它在精度方面是等价的。 long int保证java int的精度,因为它保证大小至少为32位。

答案 7 :(得分:4)

实际上intshortlong的位大小取决于编译器的实现。

E.g。在我的Ubuntu 64位上,short位为32,当另一个32位Ubuntu版本为16位时。

答案 8 :(得分:1)

__int32的C范围是-2147483648到2147483647. See here for full ranges.

unsigned short 0 to 65535
signed short –32768 to 32767
unsigned long 0 to 4294967295
signed long –2147483648 to 2147483647

如果你想使用特定大小的变量,特别是在编写涉及位操作的代码时,不能保证'int'是32位,你应该使用'标准整数类型'。

在Java中

int数据类型是32位带符号的二进制补码整数。它的最小值为-2,147,483,648,最大值为2,147,483,647(含)。

答案 9 :(得分:0)

实际上很容易理解,你甚至可以使用谷歌计算器来计算它: int有32位,计算机是二进制,因此每位可以有2个值(点)。 如果你计算2 ^ 32,你将获得4,294,967,296。所以如果你将这个数除以2,(因为它们中的一半是负整数而另一半是正数),那么你得到2,147,483,648。并且这个数字是可以用32位表示的最大的int,虽然如果你注意你会注意到2,147,483,648大于2,147,483,647乘1,这是因为其中一个数字代表0正好在中间不幸2 ^ 32不是奇数,因此你中间只有一个数字,所以正整数的密码少一个,而负数则得到完整的一半2,147,483,648。

就是这样。这取决于机器而不是语言。

答案 10 :(得分:-2)

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

答案 11 :(得分:-5)

它实际上很容易理解,你甚至可以用谷歌计算器计算它:你有一个int的32位和计算机是二进制的,因此你可以每位2(值)。如果你计算2 ^ 32,你将获得4,294,967,296。