一、爲何負數老是比正數多存儲一位,eg: 32 位的有符號整數,則其數值範圍爲 [−2^31, 2^31 − 1]?spa
用一種不專業,但好理解的方式就是就是0,正0=》00,負0=》10。可是沒有必要用2中表示0因此get
10000000 =》-128it
專業的話,先說計算機系統是用補碼錶示,而後用補碼的優勢(3個),若是用twos complement(二位補碼法,經過一個公式計算出來)表示的話10 就是表示-2class
原則:硬件
一、0表示正,1表示負數;二進制
二、計算機爲方便減法計算,在表示負數的時候引入補碼機制,將減法變成加法統一運算。那如何運算,負數整數部分取反獲得反碼,反碼+1的到補碼。計算機
在計算機系統中,數值一概用補碼進行表示和存儲。緣由在於使用補碼能夠將符號和數值統一處理,同時加法和減法也能夠統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不須要額外的硬件電路。di
補碼:正整數的補碼是其二進制表示,與原碼相同;負整數的補碼,將其原碼除符號位外的全部位取反(0變1,1變0,符號位爲1不變)後加1;生活
反碼:正數的反碼與其原碼相同;負數的反碼是對正數逐位取反,符號位保持爲1;co
現實生活的例子,10點加8點=》6點; 10點減去4點=》6點;也就是說 10-4的運算能夠轉化成10+8;4和8互爲補數。對於計算機而言,8位二進制系統的模爲2^8。在這樣的系統中減法問題也能夠化成加法問題,只需把減數用相應的補數表示就能夠了。把補數用到計算機對數的處理上,就是補碼。
統一加減法,統一正負數,補碼和原碼轉換方式同樣無需額外的硬件電路。
二、無符號n比特正數表示的範圍是多少
[0, 2^n-1]