各類數據在計算機內部的表示和存儲形式稱爲機器數。編碼
特色:spa
機器數所對應的實際數值。 blog
無符號機器數和帶符號機器數。 io
無符號(無正負號)機器數表示正數,所有二進制位均表明數值,沒有符號位。table
帶符號機器數既能夠表示正數,也能夠表示負數。基礎
最高位是符號位("0"表示「+」。「1」表示「-」),其他位表示數值。軟件
爲了運算方便,帶符號的機器數可採用原碼、反碼、補碼、移碼等不一樣的編碼方式表示。硬件
這些編碼方法被稱爲碼制。二進制
Example-1:程序
[+1]原 = 00000001; [-1]原 = 10000001。
[+127]原 = 01111111; [-127]原 = 11111111。注:(127)D = (1111111)B。
[+45]原 = 00101101; [-45]原 = 10101101。 注:(45)D = (101101)B。
Example-1:
[+1]反 = 00000001; [-1]反 = 11111110。
[+127]反 = 01111111; [-127]反 = 10000000。注:(127)D = (1111111)B。
[+45]反 = 00101101; [-45]反 = 11010010。 注:(45)D = (101101)B。
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。
採用移碼錶示時,碼值與真值大小成正比,碼值大者對應的真值也大。
在計算機中,能夠只設置加法器,而將減法運算轉換爲加法運算來實現。
原碼錶示的機器數進行減法運算是很煩的,因此在計算機中的加、減法運算主要採用補碼錶示的機器數。
計算機中的加、減法運算通常用補碼來實現。
在補碼錶示中,可將減法運算轉換成加法運算。
和的補碼等於補碼求和。 [X+Y]補 = [X]補+[Y]補
差的補碼等於被減數的補碼加上減數取負後的補碼。 [X-Y]補 = [X]補+[-Y]補
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.設置專用的硬件陣列乘法器(或除法器),完成乘除法運算。該方案需付出較高的硬件代價,可得到最高的執行速度。