2012-11-15 32 views
0

我试图为AP考试自学Java,我偶然发现了一个我不太明白的部分。JAVA:存储数字?

有一个框分成8个部分,代表8个存储位。 第一个有0个,后面的7个有1个。为什么可能的值是-2^7 - (2^7)-1,即-128 - 127?为什么不打开第一个位,并使它-2^8 - 2^8?请尽可能以最简单彻底的方式解释。我已经在网上阅读了一些答案,但我不明白。这也是我书中的第一部分,他们不能很好地解释它。

谢谢!

+0

你会如何判断它是否为负数? –

+1

阅读[two's complement representation](http://en.wikipedia.org/wiki/Two's_complement)。 – maerics

回答

1

它是一个组合问题。如果您手上有8个手指,您可以向另一个人显示多少种可能的手指组合?答案是2^8。那是2 * 2^7。 所以你有2^7正数和2^7负数,但你也必须显示零。所以这就是为什么你有2^7-1正值和2^7负值和零。我希望这解释得很好。

+0

是的,唯一我要说的就是-1,0和1的二进制表示。 –

+0

我仍然为什么把2^8改成2 * 2^7而感到困惑。也是2^7-1从指数中减去1或2^7的结果? – user1813447

+0

2^8 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 *,所以2^8 = 2^4 * 2^4 = 2^7 * 2.从2的结果中减去1^0 – nukebauer

1

Java字节表示为带符号字节,所以最左边的位表示数字的符号(正数或负数),所以只剩下7位。如果你使用了全部8位(所以你可以达到2^8),你不能代表负数。

This two's complement table shows this

+0

那么0代表第一位是正值还是负值?如果第一位是1来表示它是正还是负,那么这两个范围中的任何一个都不会是2^8? – user1813447

+0

@ user1813447 - 这两个问题都由链接表回答。 –