定點數加減運算
補碼加法:
負數用補碼表示后,可以和正數一樣去處理
當需要減去一個數x的時候,可以用加上x對應的負數的補碼【-x】補來代替
【x】補+【y】補=【x+y】補
補碼減法
【x-y】補=【x】補+【-y】補(mod 2)
【x-y】補=【x】補+【-y】補 (mod 2的n+1次方)
補碼基本規則:
- 運算的各個操作數均用補碼表示,運算結果仍是補碼
- 符號位和數值位一樣參加運算
- 如果求和,則將兩補碼直接相加,得到兩數之和的補碼,若求差,則將減數變補(【y】補變【-y】補),然后和被減數相加,得到兩數之差的補碼
- 如果超過則模丟掉
溢出:
兩個正數相加結果變為負數 溢出
兩個負數相加結果變為正數 溢出
雙符號位也叫變形補碼(00表示正 11表示負) 符號位參加運算如果結果出現 01 或10 則發生溢出
單符號位:最高數值位產生進位符號位五金位產生上溢 最高有效位無進位符號位有進位產生下一,也就是當都有進位或都沒有進位時不產生溢出,用異或們表示。
定點乘法:
原碼一位乘法:數值位相乘 符號位單獨處理
乘積的位數擴大一倍(兩個4位相乘變成8位)
改進乘法:

定點除法
原碼除法運算原理
兩個原碼表示的數相除,商的符號由兩數的符號按位相加求得,商的部分由兩數的數值部分相除求得。
被除數x原碼為【x】原=XfXn-1.....X1X0
除數y原碼【y】原=YfYn-1....y1y0
則有商q=x/y其原碼為
【q】原=(Xf異或Yf)+(0.Xn-1...X1X0/0.Yn-1...Y1Y0)

恢復余數法:
機器必須現做減法,若余數為正才知道夠減,若余數為負,才知道不夠減。不夠減是必須回復原來的余數,以便在繼續往下,這種稱為恢復余數法。
不恢復余數法:
但由於要恢復余數,使除法進行過程的步數不固定,因此控制比較復雜
實際中常用不恢復余數法,又稱加減交替法,重點是運算過程中如出現不夠減則不必恢復余數,根據余數符號,可以繼續往下運算,因此步數固定,控制簡單。


真題
1、假定在一個8位字長的計算機中進行如下類C程序
1 unsigned int x=134; 2 unsigned int y=246; 3 int m=x;int n=y; 4 unsigned int z1=x-y; 5 unsigned int z2=x+y; 6 int k1=m-n; 7 int k2=m+n;
若編譯的時候將8個8位寄存器R1~R8分別分配給x y m n z1 z2 k1 k2請回答下列問題(帶符號整數用補碼表示)
1)執行上述程序段后,寄存器R1 R5 R6和分別是什么,十六進制表示
2)執行后,變量m和k1的值分別是多少(十進制)
3)上述程序段設計帶符號的整數加減 ,無符號整數的加減運算 四種運算能否利用同一個加法器及輔助電路實現?
4)計算機內部如果判斷帶符號的整數加減運算的結果是否溢出,上述程序段中,那些帶符號整數運算語句的執行結果會溢出
| R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 |
| X | Y | m | n | z1 | z2 | k1 | k2 |
| 無符號 | 無符號 |
答:1)x=134=1000 0110=86H Y=246=1111 0110=F6H
R5=x-y=134-246=-112->1111 0000->1 001 0000(補)=90H
R6:z2=134+246=380=1 0111 1100=7CH(高位丟棄了)
2)m補=x=1000 0110->m=1111 1010 =-122
n補=y=1111 0110->n=1000 1010 =-10
k1=m-n=-122-(-10)=-112
3)能 無符號數有符號數都是二進制代碼,有符號數的符號位代碼化了,和數值位一樣參加運算,減一個數等於加上整數對應的負數的補碼
4)雙符號位 單符號位等
2、

浮點數的表示方法

| 31 | 23-30 | 0-22 | |
| 32位 | S符號位 | E移碼表示 127 | M尾數 |
| 63 | 52-62 | 0-51 | |
| 64位 | S符號位 | E移碼表示 1023 | M尾數 |
32位浮點數中,將浮點數的指數真值e變為階碼,應將指數e加上一個固定的偏移量127(01111111) E=e+127 .因為階碼是用移碼表的
規格化:當尾數的值不為0時,尾數域的最高位應為1,否則修改階碼同事左右移小數點的辦法,使其變成這一表示方式,這稱為浮點數的規格化表示。因為尾數的最高位總為1,所以這一位不需要存儲而是默認存在、
當階碼E全0(00000000)且尾數M也全為0時,表示的真值x為0,結合符號位s為0或1,有正零和負零之分
當階碼全是1(11111111)且尾數M為全0,表示的浮點數位無窮大,結合符號位S為0或1,也有正無窮大和負無窮大之分、
32位浮點數表示除去全0和全1階碼范圍為00000001 到1111 1110 也就是1到254
規格化浮點數指數e則為-126(1-127)到127(154-127)





浮點數的加減運算

因為右移丟失的誤差小,所以采用尾數右移,對階的原則是小階向大階對齊,尾數右移1位階碼+1.


浮點數的溢出:
上溢發生中斷 下溢不發生中斷
例題:




D

