首先,咱們引入一些相關的概念.編碼
機器數: 數據在計算機中的表示形式。 數的符號存在最高位(左邊),0表明正數,1表明負數。分紅有符號和無符號兩種。基礎
A.對於無符號的數值,整個都是數值區。方法
B. 對於有符號的數值,數據分紅兩部分:符號位+數值區。數據
小數點:隱含表示,不佔位置。計算機
A. 對於無符號數值,小數點在最左邊,表明是純小數。在右邊,表明純整數。
B. 對於有符號的數值,小數點在數值區最左邊,表明是純小數。在數值區右邊,表明純整數。
真值:機器數對應的真實數值。
爲了方便計算,帶符號的機器數分紅原碼、反碼和補碼的不一樣編碼方法。
1. 原碼
左邊的第一位表示符號(0爲正,1爲負), 其他位表示數值.
真值變成原碼的轉換方法:
(1)取真值的絕對值的2進製表示。
(2)左邊第一位添加符號。
例如:
考慮一個字節的存儲,-127, 絕對值爲127的2進製表示爲 0111 1111, 添加符號(1)爲 1111 1111。
當真值=0的時候,[+0]原能夠表示成 0000 0000, [-0]原能夠表示成 1000 0000。
2. 反碼
反碼的表示方法是:
(1)若是是正數,反碼與原碼同樣。
(2)若是是負數,反碼是符號位不變,原碼其他各個位取反.
例如:
[+127]原=0111 1111, [+127]反=0111 1111,
[-127]原=1111 1111, [-127]反=1000 0000。
[+0]原=0000 0000, [+0]反=0000 0000,
[-0]原=1000 0000, [-0]反=1111 1111。
3. 補碼
補碼錶示方法:
(1)若是是正數, 補碼與原碼同樣。
(2)若是是負數,在反碼的基礎上+1。
例如:
[+127]原=0111 1111, [+127]反=0111 1111,[+127]補=0111 1111
[-127]原=1111 1111, [-127]反=1000 0000,[-127]補=1000 0001
[+0]原=0000 0000, [+0]反=0000 0000,[+0]補=0000 0000,
[-0]原=1000 0000, [-0]反=1111 1111,[-0]補=0000 0000。
咱們發現,原碼、反碼、補碼對於正數和+0都是同樣的。對於0,補碼的表示惟一。