補碼的計算


在計算機中,數值是以二進制補碼形式存儲的,java 也不例外。

8 位二進制補碼的范圍為 -128~127(-27 ~ 27 - 1);byte 的范圍就是 8 位二進制補碼的范圍。

那么,問題來了。8 位二進制補碼為什么能表示 -128 呢?

補碼中第一位是符號位,只有剩下的七位是數值位,即

數值位全為 1 時,最大值為 -27 - 1 ,即 -127;如果再加 1 就會發生溢出變成 1000 0000。

在補碼中只有一個 0 ,即 0000 0000,+0;而 -0 ,1000 0000 在補碼中規定用來表示 -128,也就是補碼中的一種 數碼結合 形式,符號位也表示數值位。

上面只是說規定 1000 0000 表示 -128,那么, -128 的補碼可以通過計算出來嗎?

答案是可以的,我們可以通過無符號數來計算出補碼(無符號數的補碼原碼和反碼都是一樣的)。

有符號數可以通過模運算來獲得對應的無符號數(n 位二進制數的模為 2n,即 8 位二進制數的模為 256):

當 0<= x <= 27 時,x無 = x
當 -27 <= x < 0 時,x無 = x + 28

參考鏈接:

-128的二進制補碼是怎么得來的?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM