機器數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 爲例)