我不明白Java中的范围是如何不同的,即使位数是相同的。有人能解释一下吗?
与java int严格等效的是C中的long int。
int
long int
int32_t
这是因为在32位机器上的C - integer并不意味着使用32位来存储它,它也可能是16位。它取决于机器(依赖于实现)。
在C语言中,__int32的范围是-2147483648到2147483647。看这里的全范围。
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(含)。
32位整数,取值范围为- 2147,483,648 ~ 2147,483,647。然而,你在32位机器上的事实并不意味着你的C编译器使用32位整数。
C
在C语言中,整数(对于32位机器)是32位,范围从-32768到+32767。
错误。32位有符号整数在2的补式表示中的范围为-231到231-1,等于-2,147,483,648到2,147,483,647。
在< em > < / em >,语言本身并不决定某些数据类型的表示。它可能因机器而异,在嵌入式系统上int可以是16位宽,尽管通常是32位。
唯一的要求是short int <= int <= long int by size。此外,还有一个建议int应该表示处理器的本机容量. c。
short int
所有类型都有符号。unsigned修饰符允许您使用最高位作为值的一部分(否则将为符号位保留)。
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 < / em > < em >, Java语言规范决定数据类型的表示。
顺序是:byte 8位,short 16位,int 32位,long 64位。所有这些类型都是签署,没有unsigned版本。然而,位操作将数字视为无符号的(即正确处理所有位)。
byte
short
long
字符数据类型char为16位宽,无符号,并使用UTF-16编码保存字符(然而,可以为char分配任意16位无符号整数,表示无效字符码位)
char
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
实际上,int, short, long的位数大小取决于编译器实现。
例如,在我的Ubuntu 64位上,我的short是32位,而在另一个32位的Ubuntu版本上,它是16位。
32
16
C语言定义为各种数据类型指定最低范围。对于int,这个最小范围是-32767到32767,这意味着int必须是至少 16位宽。实现可以自由地提供更广泛的int类型,相应的范围也更广。例如,在我工作的SLES 10开发服务器上,范围是-2147483647到2137483647。
仍然有一些系统使用16位的int类型(All The World Is 不 A VAX x86),但有很多系统使用32位的int类型,可能有少数使用64位的。
C语言被设计成可以在不同的体系结构上运行。Java被设计为在虚拟机中运行,从而隐藏了这些架构上的差异。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
在标准C语言中,你可以使用INT_MAX作为最大的“int”值,这个常量必须在“limits.h”中定义。类似的常量也被定义为其他类型(http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html),如上所述,这些常量依赖于实现,但根据标准中指定的每种类型的最小位有一个最小值。
就是这样。这取决于机器,而不是语言。