2012-11-15 36 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 - 這兩個問題都由鏈接表回答。 –