抱歉,如果这是一个非常基本的问题,但为什么正面有一个减号?
它与存储的零有关吗?我认为为二进制计算可能的最高十进制数只是将两个的幂相加,例如对于 3 位无符号数
1*2^0 + 1*2^1 + 1*2^2 = 7
相同的规则不应该适用于 java 整数吗?谢谢
因为 Java 可以支持最大带符号整数,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
同样的规则也适用……7
是2^3 - 1
。是的,这是因为 0。:)
相比之下,否定去-(2^31)
所以有2^31
负数、一0
和2^31-1
严格的正数,它们增加了......
2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32
这是因为二进制补码的便利性(避免存储两个零),Java 使用这种表示形式存储数字。看看这里。
有从到的2^31
非负数。所以,是的,也存储为整数。而且,还有从到的负数。0
2^31-1
zero
2^31
-2^31
-1
它必须拆分 2^32。
1/2 为负数。
0 计为阳性。
在数学中,0 既不是负数也不是正数。
它在 .NET 和 MSSQL 中是一致的。
如果您注意到不包含负数的集合称为无符号集合。
它包含 0,不适合称其为正数。
由于二进制世界从 0 开始,因此它被视为正数。
Jack (+1) 的回答说明了原因。
如果您有 n 位,则您有 2^(n-1) 个负数(因为最高位是 1)和 2^(n-1) 个非负数。由于零是非负数,因此您最多有 2^(n-1)-1 个正数,这也是最大值。
注意:最负数没有正数,所以
-Integer.MIN_VALUE == Integer.MIN_VALUE
Java 整数是有符号的数量,因此为符号保留一位,为值保留 31 位。