為什麼一個位元組可以表示的有符號整數的範圍是-128~+127?

為什麼是-127~128?

  對於一個位元組來說,能夠表示的整數為什麼不是-127~+127,也不是-127~+128,而是-128~+127

  對於有符號整數的表示和具體的程式語言無關,而是由硬體決定的,我們能想到的最簡單的方法就是用其中一位表示符號,剩餘七位用來表示數據位。

 

  但這種方法有一個缺陷,就是會有+0和-0兩個0,能夠表示的數據只有-127~+127,同時使用兩個位組合表示同一個數字有些浪費,補碼很好的解決了這一問題。

  首先,對於正數的表示方法,與上述方法相同,但對於負數,首先符號位置為1,表示負。剩餘7位數據位的表示方法和上述有很大不同。

  從一個9位組合10000000(無符號2進位)中減去一個負數的位組合,就是該負數值的數量。

  

  同理,-127可以表示為10000001:

   至此已經可以解釋為什麼一個位元組可以表示的有符號數範圍是-128~+127了。

 

  同時,如果要對二進位補碼取反,只需要對其每一位取反再加一即可,例如,1是10000000,所以-1是11111110+1,即11111111,和前面所看到的是一樣的。