首先,我們引入一些相關的概念.
機器數: 數據在計算機中的表示形式。 數的符號存在最高位(左邊),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,補碼的表示唯一。