機器數
機器數
各種數據在計算機內部的表示和存儲形式稱為機器數。
特點:
- 采用二進制計數;
- 數的符號(正負)用“0、1”表示;
- 小數點隱含表示二不占位置。
機器數的真值
機器數所對應的實際數值。
機器數的分類
無符號機器數和帶符號機器數。
無符號機器數(表示正數)
無符號(無正負號)機器數表示正數,全部二進制位均代表數值,沒有符號位。
- 若約定小數點的位置在機器數的最低位之后,則是純整數(正整數)。
- 若約定小數點的位置在機器數的最高位之前,則是純小數(正小數)。
- 不能用原碼、反碼、補碼等編碼方法表示。
帶符號機器數(表示實數)
帶符號機器數既可以表示正數,也可以表示負數。
最高位是符號位("0"表示“+”。“1”表示“-”),其余位表示數值。
- 若約定小數點的位置在機器數的最低位之后,則是純整數。
- 若約定小數點的位置在機器數的最高位之前,則是純小數。
- 可采用原碼、反碼、補碼等編碼方法表示。
碼制
為了運算方便,帶符號的機器數可采用原碼、反碼、補碼、移碼等不同的編碼方式表示。
這些編碼方法被稱為碼制。
原碼表示
規則:
- 數值X的原碼記為[X]原;
- 機器字長為n,即采用n個二進制位表示數據。
- 最高位為符號位,“0”表示正號,“1”表示負號。
- 其余的n-1位表示數值的絕對值。
- 對數“0”有“+0”和“- 0”兩種表示形式。
- 對於機器字長為n+1位的機器,原碼表示法可表示的整型數值范圍為:-2n+1 ≤ X ≤ 2n-1。
- 當X ≥ 0時,[X]原 = 0X; eg:[+7]原 = 00000111 (設機器字長為8)。
- 當X ≤ 0時,[X]原 = 1X; eg:[- 7]原 = 10000111 (設機器字長為8)。
- [+0]原 = 00000000;
- [- 0]原 = 10000000;
Example-1:
[+1]原 = 00000001; [-1]原 = 10000001。
[+127]原 = 01111111; [-127]原 = 11111111。注:(127)D = (1111111)B。
[+45]原 = 00101101; [-45]原 = 10101101。 注:(45)D = (101101)B。
反碼表示
規則:
- 數值X的反碼記為[X]反;
- 機器字長為n,即采用n個二進制位表示數據。
- 最高位為符號位,“0”表示正號,“1”表示負號。
- 其余的n-1位表示數值。
- 對數“0”有“+0”和“-0”兩種表示形式。
- 對於機器字長為n+1位的機器,反碼表示法可表示的整型數值范圍為:-2n+1 ≤ X ≤ 2n-1。
- 正數的反碼與原碼相同。即當X ≥ 0時,[X]反 = [X]原 = 0X。
- 負數的反碼則是要將除符號位外的絕對值按位取反。
- 當X ≥ 0時,[X]反 = 0 X; eg:[+7]反 [+7]原 = 00000111 (設機器字長為8)。
- 當X ≤ 0時,[X]反 = 1 |X|; eg:[- 7]反 = 11111000 (設機器字長為8)。
- [+0]反 = 00000000;
- [- 0]反 = 11111111;
Example-1:
[+1]反 = 00000001; [-1]反 = 11111110。
[+127]反 = 01111111; [-127]反 = 10000000。注:(127)D = (1111111)B。
[+45]反 = 00101101; [-45]反 = 11010010。 注:(45)D = (101101)B。
補碼表示
規則:
- 數值X的補碼記為[X]補;
- 機器字長為n,即采用n個二進制位表示數據。
- 最高位為符號位,“0”表示正號,“1”表示負號。
- 其余的n-1位表示數值。
- 對數“0”只有唯一的“0”一種表示形式。
- [+0]補 = 00000000;
- [- 0]補 = 00000000;
- 對於機器字長為n+1位的機器,反碼表示法可表示的整型數值范圍為:-2n ≤ X ≤ 2n-1。
- 正數的補碼與其反碼和原碼相同。即當X ≥ 0時,[X]補 = [X]反 = [X]原 = 0X。
- 負數的補碼則等於在其反碼的末尾加1(將其原碼除符號位外的其他位按位取反后加1)。
- 當X ≥ 0時,[X]補 = [X]反 = [X]原 = 0X; eg:[+7]補 = [+7]反 = [+7]原 = 00000111 (設機器字長為8)。
- 當X < 0時,[X]補 = 1 |X| +1 eg:[- 7]補 = 11111001 [- 7]反 = 11111000(設機器字長為8)。
Example-1:
[+1]補 = 00000001; [- 1]反 = 11111110; [- 1]補 = 11111111。
[+127]補 = 01111111; [- 127]反 = 10000000; [- 127]補 = 10000001。注:(127)D = (1111111)B。
[+45]補 = 00101101; [- 45]反 = 11010010; [- 45]補 = 11010011。 注:(45)D = (101101)B。
補碼運算的優點(功能)
將減法運算變成加法運算(因為運算器中只有加法器)。
例如計算96 - 20 = ?。
| 96 | -20 | 76 | |
| 無符號位二進制表示 | 1100000 | -10100 | 1001100 |
| 原碼 | 01100000 | 10010100 | 01001100 |
| 反碼 | 01100000 | 11101011 | 01001100 |
| 補碼 | 01100000 | 11101100 | 01001100 |
將96-20轉換為[96]補 + [-20]補,計算過程如下:

最高位的進位1自然丟失。
補碼表示的一個另外情況(原碼、反碼表示無此情況)
對於n位補碼表示法,當符號位為1而數值位全部為0時,它表示整數 -2n-1,即此時符號位的1,既表示負數又表示數值。
Eg:當機器字長為8時,符號位為1而數值位全部為0為數值 10000000,(10000000)B = (128)D = 28-1 = 27 = 128。且符號位還表示負號。
所以[- 128]補 = 10000000。
補碼的另一特點
用補碼表示時,由於符號位和數值位一起編碼,難以從補碼碼值形式判斷真值大小。如45 > - 45,然而,[45]補 = 00101101 < [- 45]補 = 11010011。
移碼(增碼)表示
移碼(又叫增碼)是符號位取反的補碼,將補碼的符號位取反即可得到移碼表示;一般用做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。
采用移碼表示時,碼值與真值大小成正比,碼值大者對應的真值也大。
規則:
- 最高位為符號位,“1”表示正號,“0”表示負號。
- 機器字長為n,即采用n個二進制位表示數據。
- 當-2n ≤ X ≤ 2n時,[X]移 = 2n+X。
特點:
- 保持了數據原有的大小順序,便於進行比較操作。
機器數的運算
機器數的加減運算
在計算機中,可以只設置加法器,而將減法運算轉換為加法運算來實現。
原碼加、減法
- 兩個符號相同的原碼數相加時,只需將數值部分直接相加,運算結果的符號與兩個加數的符號相同。
- 若兩個加數的符號相異,則應進行減法運算。方法:先比較兩個數絕對值的大小,然后用絕對值大者的絕對值減去絕對值小者的絕對值,結果的符號取絕對值大者的符號。
原碼表示的機器數進行減法運算是很煩的,所以在計算機中的加、減法運算主要采用補碼表示的機器數。
補碼加、減法
計算機中的加、減法運算一般用補碼來實現。
在補碼表示中,可將減法運算轉換成加法運算。
補碼加法:
和的補碼等於補碼求和。 [X+Y]補 = [X]補+[Y]補
補碼減法:
差的補碼等於被減數的補碼加上減數取負后的補碼。 [X-Y]補 = [X]補+[-Y]補
- 由[X]補求[-X]補的方法:
- 將[X]補的各位取反(包括符號位),末尾加1。
總結:
X±Y → [X+Y]補=[X]補+[±Y]補
Example-1:
設二進制整數X = +1000100, Y = +1110,求X+Y與X-Y的值。
解:
設用8位補碼表示帶符號機器數
因為X和Y都是正數
所以[X]補 = 01000100,[Y]補 = 00001110;
溢出及其判定
機器數的乘除運算
機器數的乘除法運算,通常有如下3種實現形式:
1.純軟件方案。在只有加法器的低檔計算機中,沒有乘、除法指令,乘除運算使用程序來實現的。這種方案的硬件結構簡單,但作乘除法運算時速度緩慢。
2.在現有的能夠完成加減運算的算術邏輯單元ALU的基礎上,通過增加少量的左、右移位的邏輯電路,來實現乘除運算。與純軟件方案相比,這種方案增加硬件不多,而乘除法的運算速度有了較大提高。
3.設置專用的硬件陣列乘法器(或除法器),完成乘除法運算。該方案需付出較高的硬件代價,可獲得最高的執行速度。
