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

2022-09-04 05:55:49

抱歉,如果这是一个非常基本的问题,但为什么积极的一面有一个负数呢?

它与存储的零或其他东西有关吗?我以为计算二进制的最高可能十进制数只是将2的幂相加,就像对于3位无符号一样,它将是

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

同样的规则不应该适用于java整数吗?谢谢


答案 1

因为 Java 可以支持 max 符号 int,因为 max 符号是 2^31-1。0x7fffffff

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

二元水平比较将是:

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

答案 2

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

相比之下,底片转到-(2^31)

因此,有负数,一个,和严格的正数,它们增加了...2^3102^31-1

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