为什么java 2 ^ 31 - 1中的最大整数而不是2 ^ 31

时间:2012-10-12 20:22:20

标签: java memory integer

很抱歉,如果这是一个非常基本的问题,但为什么正面有一个减号?

是否与存储的零或其他东西有关?我认为计算二进制最高可能的十进制数只是为了增加2的幂,就像3位无符号那样它将是

1*2^0 + 1*2^1 + 1*2^2 = 7

同一规则是否应该适用于java整数?感谢

7 个答案:

答案 0 :(得分:14)

因为Java支持max signed int为0x7fffffff,即2 ^ 31-1。

2^31 = 0x80000000 is negative so Positive is 2^31-1

二元级别的比较将是:

10000000000000000000000000000000  --> 2147483648 --> 2^31
01111111111111111111111111111111  --> 2147483647 --> 2^31 -1
^ Sign bit

答案 1 :(得分:6)

同样的规则适用... 72^3 - 1。是的,这是因为0. :)

相反,否定的内容是-(2^31)

因此有2^31个负数,一个02^31-1严格肯定,这会增加......

2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32

答案 2 :(得分:5)

这是因为二重补充(避免存储两个零)的便利性,而Java使用该表示存储数字。看看here

答案 3 :(得分:3)

2^31个非负数,范围从02^31-1。所以,是的,zero也存储为整数。此外,还有2^31个负数,范围从-2^31-1

答案 4 :(得分:2)

必须拆分2 ^ 32 1/2是否定的。
0表示正数。
在数学中,0既不是消极也不是正面 它在.NET和MSSQL中是一致的。

如果您注意到不包含底片的组称为无符号 它包含0并且不适合将其称为正数 由于二进制世界从0开始,它被视为正面 杰克(+1)的答案有其原因。

答案 5 :(得分:1)

如果你有n位,你有2 ^(n-1)个负数(顶部位是1)和2 ^(n-1)个非负数。由于零是非负数,因此最多有2 ^(n-1)-1个正数,这也是最大值。

注意:最负面的数字没有正面因此

-Integer.MIN_VALUE == Integer.MIN_VALUE

答案 6 :(得分:0)

Java整数是带符号的数量,因此为符号保留一位,为该值留下31位。