2 计算机组成原理第二章 数据的表示和运算 定点数运算 浮点数运算
文章目錄
- 1 進(jìn)制轉(zhuǎn)換
- 2 定點(diǎn)數(shù)表示及其運(yùn)算
- 2.1 定點(diǎn)數(shù)表示
- 2.1.1 真值→補(bǔ)碼
- 2.1.2 補(bǔ)碼→真值
- 2.1.3 [XT]補(bǔ) →[-XT]補(bǔ)
- 2.1.4 真值、原碼、反碼、補(bǔ)碼轉(zhuǎn)換關(guān)系圖形總結(jié)
- 2.2.4 移碼
- 2.2 定點(diǎn)數(shù)運(yùn)算
- 2.2.1 移位運(yùn)算
- 2.2.2 定點(diǎn)數(shù)加減運(yùn)算
- 2.2.3 溢出判斷
- 判溢出方法一
- 判溢出方法二
- 判溢出方法三
- 3 浮點(diǎn)數(shù)及其運(yùn)算
- 3.1 浮點(diǎn)數(shù)表示
- 3.2 浮點(diǎn)數(shù)規(guī)格化
- 3.3 規(guī)格化浮點(diǎn)數(shù)的特點(diǎn)
- 3.4 IEEE754 標(biāo)準(zhǔn)
- 3.5 浮點(diǎn)數(shù)加減
- 3.5.1 浮點(diǎn)數(shù)的加減運(yùn)算實(shí)例
- 3.5.2 舍入
- 3.6 浮點(diǎn)數(shù)強(qiáng)制類型轉(zhuǎn)換
1 進(jìn)制轉(zhuǎn)換
任意進(jìn)制→十進(jìn)制
已知K、r、n
按權(quán)展開相加法
十進(jìn)制→任意進(jìn)制
除基取余法:
乘基取整法:
進(jìn)制之間的轉(zhuǎn)換
分組轉(zhuǎn)換:
2n進(jìn)制之間的轉(zhuǎn)換:二進(jìn)制、四進(jìn)制、八進(jìn)制、十六進(jìn)制
二進(jìn)制一>四進(jìn)制、八進(jìn)制、十六進(jìn)制n位一組,每組轉(zhuǎn)換成對(duì)應(yīng)進(jìn)制的符號(hào),位數(shù)不夠補(bǔ)左邊最高位0和右邊最低位0
四進(jìn)制、八進(jìn)制、十六進(jìn)制一>二進(jìn)制
每位寫成對(duì)應(yīng)的二進(jìn)制形式
BCD碼
用途:可以實(shí)現(xiàn)二進(jìn)制,十進(jìn)制的快速轉(zhuǎn)換(一一對(duì)應(yīng))
8421碼,4位一組的二進(jìn)制表示十進(jìn)制對(duì)應(yīng)的符號(hào)
| 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 |
遇到8421碼某組上的計(jì)算產(chǎn)生超過1001時(shí),需進(jìn)行加6(0110)進(jìn)行結(jié)果修正
2 定點(diǎn)數(shù)表示及其運(yùn)算
小數(shù)點(diǎn)位置約定在固定位置的數(shù)稱為定點(diǎn)數(shù)
小數(shù)點(diǎn)位置約定為可浮動(dòng)的數(shù)稱為浮點(diǎn)數(shù)
2.1 定點(diǎn)數(shù)表示
定點(diǎn)數(shù)可分為無符號(hào)數(shù)和有符號(hào)數(shù)
- 無符號(hào)數(shù):整個(gè)機(jī)器字長(zhǎng)的全部二進(jìn)制位均為數(shù)值位,沒有符號(hào)位,相當(dāng)于數(shù)的絕對(duì)值。
- 無符號(hào)數(shù)表示范圍:n位的無符號(hào)數(shù)表示范圍為:0~2n-1
有符號(hào)數(shù)對(duì)應(yīng)真值和機(jī)器數(shù)
真值和機(jī)器數(shù)
2.1.1 真值→補(bǔ)碼
- 正數(shù):[X]原=[X]反=[X]補(bǔ) 正數(shù)原反補(bǔ)一樣
- 負(fù)數(shù):
求補(bǔ)碼:原符號(hào)位不變,數(shù)值部分按位取反,末尾+1
求反碼:符號(hào)位不變,數(shù)值位按位取反
2.1.2 補(bǔ)碼→真值
按位取反+1
[XT]補(bǔ) =1 0110100
[XT]= -(1001011+1)= -1001100
2.1.3 [XT]補(bǔ) →[-XT]補(bǔ)
連同符號(hào)位各位取反,末尾+1
[XT]補(bǔ)=1 0110100
[-XT]補(bǔ)= 0 1001100
2.1.4 真值、原碼、反碼、補(bǔ)碼轉(zhuǎn)換關(guān)系圖形總結(jié)
2.2.4 移碼
浮點(diǎn)數(shù)階碼用移碼表示,移碼只用來表示定點(diǎn)整數(shù)
設(shè)E為階碼,階碼的移碼表示位n位,[E]移=2n-1+E(2n-1為偏置常數(shù))
2.2 定點(diǎn)數(shù)運(yùn)算
2.2.1 移位運(yùn)算
r進(jìn)制
右移n位:÷ rn
左移n位: × rn
-
機(jī)器數(shù)采用無符號(hào)數(shù):邏輯移位
邏輯左移時(shí),高位移丟,低位添0;邏輯右移時(shí),低位移丟,高位添0 -
機(jī)器碼采用有符號(hào)數(shù):算術(shù)移位
算術(shù)移位:左移相當(dāng)于乘以基數(shù),右移相當(dāng)于除以基數(shù)
符號(hào)位不參與移位
結(jié)論:原碼算術(shù)移位:左移丟1,運(yùn)算出錯(cuò);右移丟1,影響精度。
正數(shù):原碼、補(bǔ)碼、反碼一樣→左移、右移都補(bǔ)0
負(fù)數(shù):反碼1<——>原碼0
2.2.2 定點(diǎn)數(shù)加減運(yùn)算
補(bǔ)碼的主要作用:兩個(gè)有符號(hào)數(shù)可以直接相加
加減運(yùn)算基本思路:
例題:設(shè)機(jī)器字長(zhǎng)為8位(含1位符號(hào)位),A=15,B=-24,求[A+B]補(bǔ)和[A-B]補(bǔ)
走捷徑:十進(jìn)制運(yùn)輸完畢將結(jié)果轉(zhuǎn)換為補(bǔ)碼
也可以先轉(zhuǎn)化為補(bǔ)碼,再將補(bǔ)碼進(jìn)行符號(hào)擴(kuò)展
[A+B]補(bǔ)=[A]補(bǔ)+[B]補(bǔ)=0,0001111+1,1101000=1,1110111
補(bǔ)碼1,1110111,對(duì)應(yīng)原碼:1,0001001 真值就是-9,15+(-24)=-9
[A-B]補(bǔ)=[4]補(bǔ)+[-B]補(bǔ)=0,0001111+0,0011000=0,0100111
補(bǔ)碼0,0100111對(duì)應(yīng)真值+39,15-(-24)=+39
[-B]補(bǔ):[B]補(bǔ)連同符號(hào)位一起取反加1
2.2.3 溢出判斷
正溢出:兩個(gè)正數(shù)做加法得負(fù)數(shù)
負(fù)溢出:兩個(gè)負(fù)數(shù)做加法得正數(shù)
例:A=15,B=-34,C=124,求[A+C]補(bǔ)和[B-C]補(bǔ)
[A+C]補(bǔ)=0 0001111+0 1111100=1 10001011 真值-11→正溢出
[B-C]補(bǔ)=1 101000+0 000100=10 1101100 真值+108→負(fù)溢出
判溢出方法一
采用一位符號(hào)位設(shè)A的符號(hào)為As,B的符號(hào)為Bs,運(yùn)算結(jié)果的符號(hào)為Ss,則溢出邏輯表達(dá)式為
V表示含義:[As為1且Bs為1且Ss為0] 或 [As為0且Bs為0且Ss為1]
若V=0,表示無溢出;
若V=1,表示有溢出。
補(bǔ)充邏輯表達(dá)式:
A、B、C中有一個(gè)或多個(gè)為0,則ABC為0
A、B、C中有一個(gè)或多個(gè)為1,則A+B+C為1
判溢出方法二
采用一位符號(hào)位,根據(jù)數(shù)據(jù)位進(jìn)位情況判斷溢出
| 正溢出 | 0 | 1 |
| 負(fù)溢出 | 1 | 0 |
即:Cs與C1不同時(shí)有溢出
處理“不同”的邏輯符號(hào):異或
溢出邏輯判斷表達(dá)式為:
若V=0,表示無溢出;
V=1,表示有溢出。
補(bǔ)充異或:
判溢出方法三
采用雙符號(hào)位,配合補(bǔ)碼
正數(shù)符號(hào)為00,負(fù)數(shù)符號(hào)為11
[A+C]補(bǔ)=00,0001111+00,1111100=01,0001011→正溢出
[B-C]補(bǔ)=11,1101000+11,0000100=10,1101100→負(fù)溢出
記兩個(gè)符號(hào)位為Ss1Ss2,則
若V=0,表示無溢出;
若V=1,表示有溢出。
利用雙符號(hào)位計(jì)算[A+B]補(bǔ)和[A-B]補(bǔ)
[A+B]補(bǔ)=00,0001111+11,1101000=11,1110111
[A-B]補(bǔ)=00,0001111+00,0011000=00,0100111
采用雙符號(hào)位的移位運(yùn)算:低位符號(hào)位參與移位,高位符號(hào)位代表真正的符號(hào)
11,1110111 右移1位: 11,1111011 //低位符號(hào)位參與右移,對(duì)于負(fù)數(shù)補(bǔ)碼,符號(hào)位空出的部分補(bǔ)1 00,0100111 左移1位: 00,1001110 //左移一位,數(shù)值位最高位0移到符號(hào)位低位,數(shù)值位低位空出的部分則補(bǔ)0 00,0100111 左移2位: 01,0011100 正溢出3 浮點(diǎn)數(shù)及其運(yùn)算
3.1 浮點(diǎn)數(shù)表示
任意一個(gè)二進(jìn)制數(shù)X可以表示為: X=(-1)S× M × RE
S取值為0或1,用來決定X的符號(hào)
M是一個(gè)二進(jìn)制定點(diǎn)小數(shù),稱為數(shù)X的尾數(shù)
E是一個(gè)二進(jìn)制定點(diǎn)整數(shù),稱為X的階碼或指數(shù)
R是基數(shù),可以取值為 2、4、16
階碼:常用補(bǔ)碼或移碼表示
尾數(shù):常用原碼或補(bǔ)碼表示
階碼E反映浮點(diǎn)數(shù)的表示范圍及小數(shù)點(diǎn)的實(shí)際位置;尾數(shù)M的數(shù)值部分的位數(shù)n反映浮點(diǎn)數(shù)的精度。
例:階碼、尾數(shù)均用補(bǔ)碼表示,求b的真值
如果尾數(shù)部分只存儲(chǔ)1001,怎么處理?----→規(guī)格化
3.2 浮點(diǎn)數(shù)規(guī)格化
規(guī)格化:規(guī)定尾數(shù)的最高數(shù)位必須是一個(gè)有效值。對(duì)于二進(jìn)制來說最高位數(shù)1有效,對(duì)于其他進(jìn)制,不是0則有效
左規(guī):當(dāng)浮點(diǎn)數(shù)運(yùn)算的結(jié)果為 非規(guī)格化時(shí) 要進(jìn)行規(guī)格化處理,將尾數(shù)左移一位,階碼減1(基數(shù)為2時(shí))。
右規(guī):當(dāng)浮點(diǎn)數(shù)運(yùn)算的結(jié)果尾數(shù)出現(xiàn) 溢出(雙符號(hào)位為01或10) 時(shí),將尾數(shù)右移一位,階碼加1(基數(shù)為2時(shí))。
例:a=010;00.1001,b=010;00.1000,求a+b
a=22 × 00.1001; b=22 × 00.1000
a+b=22 × 00.1001+22 × 00.1000
=22 ×(00.1001+00.1000)
=22 × 01.0100 →尾數(shù)溢出,右規(guī)
=23 × 00.1010
3.3 規(guī)格化浮點(diǎn)數(shù)的特點(diǎn)
規(guī)格化浮點(diǎn)數(shù)的尾數(shù)M的絕對(duì)值應(yīng)滿足:1/r<|M|<1
如果r=2,則有1/2<M<1
- 正數(shù)為0.1××…×的形式,其最大值表示為0.11…1;最小值表示為0.10…0。
尾數(shù)的表示范圍為 1/2≤M≤(1-2-n)。 - 負(fù)數(shù)為1.1××.…×的形式,其最大值表示為1.10…0;最小值表示為1.11…1。
尾數(shù)的表示范圍為 -(1-2-n)≤M≤ -1/2。
- 正數(shù)為0.1××…×的形式,其最大值表示為0.11…1;最小值表示為0.10…0。
尾數(shù)的表示范圍為 1/2≤M≤(1-2-n)。 - 負(fù)數(shù)為1.0××.…×的形式,其最大值表示為1.01…1;最小值表示為1.00…0。
尾數(shù)的表示范圍為 -1≤M≤ -(1/2+2-n)。
3.4 IEEE754 標(biāo)準(zhǔn)
尾數(shù)規(guī)格化,最高位肯定為1,若尾數(shù)原碼xx...x,則尾數(shù)是1.xx...x
階碼部分用移碼表示的,由移碼得真值要減去偏置值
短浮點(diǎn)數(shù):
長(zhǎng)浮點(diǎn)數(shù):
IEEE754 標(biāo)準(zhǔn)下短浮點(diǎn)數(shù)和長(zhǎng)浮點(diǎn)數(shù)的真值:
IEEE 754 標(biāo)準(zhǔn)一些規(guī)定(短浮點(diǎn)數(shù)為例):
3.5 浮點(diǎn)數(shù)加減
浮點(diǎn)數(shù)加減運(yùn)算步驟:
一般在對(duì)階之前就有必須要把真值轉(zhuǎn)化為機(jī)器數(shù)的步驟(即用補(bǔ)碼表示階碼和尾數(shù))
3.5.1 浮點(diǎn)數(shù)的加減運(yùn)算實(shí)例
例:已知十進(jìn)制數(shù)X=-5/256、Y=+59/1024,按機(jī)器補(bǔ)碼浮點(diǎn)運(yùn)算規(guī)則計(jì)算X-Y,結(jié)果用二進(jìn)制表示,浮點(diǎn)數(shù)格式如下:階符取2位,階碼取3位,數(shù)符取2位,尾數(shù)取9位
- 將X的階碼轉(zhuǎn)化為機(jī)器數(shù):-101 補(bǔ)碼:1 011,再變?yōu)殡p符號(hào)位(階符取兩位): 11 011(11 代表負(fù),00代表正),數(shù)值部分(階碼)3位不需要擴(kuò)展
- 將X的尾數(shù)轉(zhuǎn)化為機(jī)器數(shù):-0.101 補(bǔ)碼:1.011 ,再變?yōu)殡p符號(hào)位(數(shù)符取兩位):11.011,尾數(shù)取9位則擴(kuò)展到9位:11.011000000(小數(shù)低位添0,整數(shù)高位添0)
轉(zhuǎn)化完畢X,Y機(jī)器數(shù)表示:X:11 011,11.011000000 ;Y:11 100,00.111011000
轉(zhuǎn)化完接下來就是對(duì)階
對(duì)階目的:使兩個(gè)數(shù)的階碼相等,小階向大階看齊,尾數(shù)每右移一位,階碼加1
①求階差:[△E]補(bǔ)=[X階]補(bǔ)+[-Y階]補(bǔ)=11011+00100=11111,知△E=-1(被減的數(shù)轉(zhuǎn)化為相反數(shù)的補(bǔ)碼形式,即[Y]補(bǔ)→[-Y]補(bǔ)→連同符號(hào)位按位取反,末尾+1)
②對(duì)階X 向Y看齊:X:11011,11.011000000→11100,11.101100000(X尾數(shù)右移1位,階碼+1)
尾數(shù)左移/右移:雙符號(hào)位也要參與移位
接下來進(jìn)行尾數(shù)加減,原理就是提取公因式
求 X-Y,先求-Y補(bǔ)碼:階碼部分不變,尾數(shù)調(diào)整為相反數(shù)補(bǔ)碼,即連同符號(hào)位按位取反,末尾+1
[-Y]補(bǔ):11100,11.000101000
X-Y=11100,10.110001000
機(jī)器數(shù)操作不理解,可以把真值操作寫在旁邊對(duì)比:
算出的結(jié)果符號(hào)位10,溢出了,需要右規(guī)
X-Y:11100,10.110001000→11101,11.011000100
對(duì)應(yīng)真值運(yùn)算:
- 規(guī)格化之后,觀察階碼階符是否還保持正常情況(00或11),則此次運(yùn)算不溢出,若規(guī)格化后,雙符號(hào)位表現(xiàn)出溢出模式(10或 01),此次運(yùn)算一定溢出!
- 在加減處溢出不一定是溢出,只有在規(guī)格化以后還是溢出,才是真正溢出!
這里無舍入,因?yàn)槲矓?shù)右移時(shí)候,末尾丟的是一個(gè)0,不影響整個(gè)數(shù)值運(yùn)算
此處正常階碼11,無溢出
所以結(jié)果真值為2-3×(-0.1001111)2
3.5.2 舍入
例:兩浮點(diǎn)數(shù)加減后結(jié)果為11100,10.110001011。此時(shí)肯定需要右規(guī)
采用0舍1入:11100,10.110001011→11101,11.011000101 1(末尾1丟棄,需要+1)
→11101,11.011000110 (末尾+1后進(jìn)位)
恒置1:11100,10.110001011→11101,11.011000101 1
→11101,11.011000101 1
3.6 浮點(diǎn)數(shù)強(qiáng)制類型轉(zhuǎn)換
| char | 8 | 8 | 8 |
| short | 16 | 16 | 16 |
| int | 16 | 32 | 32 |
| long | 32 | 32 | 64 |
| long long | 64 | 64 | 64 |
| float | 16 | 32 | 32 |
| double | 64 | 64 | 64 |
char →int→long →double
float →double
范圍、精度從小到大,轉(zhuǎn)換過程沒有損失
32位
int:表示整數(shù),范圍-231-231-1,有效數(shù)字32位
float:表示整數(shù)及小數(shù),范圍 士[2-126 ~~ 2+127×(2-2-23)],有效數(shù)字23+1=24位
int→float:可能損失精度
float →int:可能溢出及損失精度
總結(jié)
以上是生活随笔為你收集整理的2 计算机组成原理第二章 数据的表示和运算 定点数运算 浮点数运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中出现:AttributeE
- 下一篇: 水声被动定位中的机器学习方法研究进展综述