計算機說 - 原碼、反碼和補碼

機器數spa

1 - 一個數在計算機中的二進制表示形式, 叫作這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數爲0, 負數爲1。好比,十進制數 +3 ,計算機字長爲8位,轉換成二進制就是0000 0011,若是是 -3 ,就是1000 0011 。那麼,這裏的0000 0011和1000 0011就是機器數blog

真值it

1 - 由於有符號位,因此機器數的形式值就不等於真正的數值。例如,上面的有符號數1000 0011,其最高位1表明負,其真正數值是 -3 而不是形式值131(1000 0011轉換成十進制等於131)。因此,爲區別起見,將帶符號位的機器數對應的真正數值稱爲機器數的真值:0000 0001的真值 = +000 0001 = +1;1000 0001的真值 = –000 0001 = –1基礎

原碼變量

1 - 原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其他位表示值,如:[+1]原 = 0000 0001,[-1]原 = 1000 0001,第一位是符號位. 由於第一位是符號位, 因此8位二進制數的取值範圍就是 [1111 1111 , 0111 1111],即 [-128 , 127]二進制

2 - 原碼是人腦最容易理解和計算的表示方式方法

反碼im

1 - 反碼的表示方法是:正數的反碼是其自己;負數的反碼是在其原碼的基礎上, 符號位不變,其他各個位取反,如:[+1] = [00000001]原 = [00000001]反;[-1] = [10000001]原 = [11111110]反。可見若是一個反碼錶示的是負數, 人腦沒法直觀的看出來它的數值. 一般要將其轉換成原碼再計算。img

補碼計算機

1 - 補碼的表示方法是:正數的補碼就是其自己;負數的補碼是在其原碼的基礎上, 符號位不變, 其他各位取反, 最後+1. (即在反碼的基礎上+1),如:[+1] = [00000001]原 = [00000001]反 = [00000001]補;[-1] = [10000001]原 = [11111110]反 = [11111111]補

2 - 對於負數, 補碼錶示方式也是人腦沒法直觀看出其數值的,一般也須要轉換成原碼再計算其數值

補碼錶示的溢出問題

1 - 因爲計算機中的數字用補碼錶示,例如8 bit 的 byte 類型的表示範圍爲:[-128, 127],如:0 = [0000 0000](補)  -128 = [1000 0000](補)  127 = [0111 1111](補)

2 - 當 byte 類型的變量超上限127時

(1)128 = 127 + 1 

     = [0111 1111](補)+ [0000 0001](補) 

     = [1000 0000](補) 

     = -128

(2)129 = 127 + 2 

     = [0111 1111](補)+ [0000 0010](補) 

     = [1000 0001](補) 

     = -127

3 - 當 byte 類型的變量超過下限-128時

(1)-129 = -128 - 1 

      = [1000 0000](補) - [0000 0001](補) 

      = [0111 1111](補) 

      = 127

(2)-130 = -128 - 2 

       = [1000 0000](補) - [0000 0010](補) 

       = [0111 1110](補) 

       = 126

4 - 關於補碼溢出的問題,可用一張圖來描述(以 8 bit 爲例)

相關文章
相關標籤/搜索