在C中,整数(对于32位机)是32位,范围是-32,768到+32,767。 在Java中,整数(long)也是32位,但范围是从-2,147,483,648到+2,147,483,647。
我不明白 Java 中的范围有何不同,即使位数相同。有人能解释一下吗?
最佳答案
在C中,语言本身并不决定某些数据类型的表示。它可能因机器而异,在嵌入式系统上,int
可以是 16 位宽,但通常是 32 位。
唯一的要求是 short int
<= int
<= long int
按大小。此外,还建议 int
应代表处理器的 native 容量。
所有类型均已签名。 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
关于java - 整数的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618116/