对不起,如果这是一个非常基本的问题,但为什么有一个负值的正面呢?为什么java中的最大整数是2^31 - 1而不是2^31
它是否与存储零或什么?我想计算二进制尽可能高的十进制数也只是补充的两个大国了,像一个3位无符号这将是
1*2^0 + 1*2^1 + 1*2^2 = 7
不应该相同的规则适用于Java的整数?谢谢
对不起,如果这是一个非常基本的问题,但为什么有一个负值的正面呢?为什么java中的最大整数是2^31 - 1而不是2^31
它是否与存储零或什么?我想计算二进制尽可能高的十进制数也只是补充的两个大国了,像一个3位无符号这将是
1*2^0 + 1*2^1 + 1*2^2 = 7
不应该相同的规则适用于Java的整数?谢谢
因为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
谢谢,这使得它更清楚 –
“有符号位”应该是“符号位” – Roland
同样的规则不适用...... 7
是2^3 - 1
。是的,这是因为0 :)
相比之下,底片去-(2^31)
因此,有2^31
负数,一个0
,并且2^31-1
严格阳性,其中添加到...
2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32
有2^31
非负数范围从0
到2^31-1
。所以,是的,zero
也存储为一个整数。此外,还有2^31
负数,范围从-2^31
到-1
。
如果您有n位,则有2 ^(n-1)个负数(顶部位为1)和2 ^(n-1)个非负数。由于零是一个非负数,所以你有多达2 ^(n-1)-1的正数,这也是最大的。
注:有没有积极为最负值,这样
-Integer.MIN_VALUE == Integer.MIN_VALUE
这是因为补的便利性(从而避免了存储两个零),并使用rapresentation Java的店号。看看here。
的Java整数签订量,所以一个位保留为标志,留下31位的值。
由于[二补](http://en.wikipedia.org/wiki/Two's_complement);看到相关的问题:http://stackoverflow.com/questions/3809044/how-many-values-can-be-represented-with-9-bits/3809058#3809058 – NullUserException
上帝的母亲,第一次张贴到一个Java标记和有很多回应,谢谢大家! –