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

Luc*_*ang 13 java memory integer

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

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

1*2^0 + 1*2^1 + 1*2^2 = 7
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*nde 14

因为Java可以支持max signed int,因为0x7fffffff它是2 ^ 31-1.

2^31 = 0x80000000 is negative so Positive is 2^31-1
Run Code Online (Sandbox Code Playgroud)

二元级别的比较将是:

10000000000000000000000000000000  --> 2147483648 --> 2^31
01111111111111111111111111111111  --> 2147483647 --> 2^31 -1
^ Sign bit
Run Code Online (Sandbox Code Playgroud)

  • “有符号位”应为“符号位” (2认同)

Luc*_*ore 6

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

相反,负面因素 -(2^31)

所以有2^31负数,一个02^31-1严格的正面,这增加了......

2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32
Run Code Online (Sandbox Code Playgroud)


RGO*_*RGO 5

2^310到 的非负数2^31-1。所以,是的,zero也存储为整数。而且,还有2^31-2^31到 的负数-1


Jac*_*ack 5

这是因为两个补码的便利性(避免存储两个零),Java使用该表示存储数字.看看这里.