版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第三章:運(yùn)算方法和運(yùn)算器3.1數(shù)據(jù)與文字的表示方法
3.2定點(diǎn)加法、減法運(yùn)算
3.3定點(diǎn)乘法運(yùn)算
3.4定點(diǎn)除法運(yùn)算
3.5定點(diǎn)運(yùn)算器的組成
3.6浮點(diǎn)運(yùn)算方法和浮點(diǎn)運(yùn)算器
3.1數(shù)據(jù)的表示方法和轉(zhuǎn)化3.1.1數(shù)值型數(shù)據(jù)的表示和轉(zhuǎn)化1.數(shù)制:基于r個(gè)基本符號表示數(shù)值,稱其為基r數(shù)制。2.不同數(shù)制間的數(shù)據(jù)轉(zhuǎn)化
(1)二進(jìn)制數(shù)、八進(jìn)制數(shù)和十六進(jìn)制數(shù)之間的轉(zhuǎn)化從二進(jìn)制到八進(jìn)制,以3位為1組例3.4(1101.0101)2=(001101.010100)2=(15.24)8從二進(jìn)制到十六進(jìn)制,以4位為1組例3.5(11101.0101)2=(00011101.0101)2=(1D.5)16
從八進(jìn)制或十六進(jìn)制到二進(jìn)制,順序?qū)?位寫成3位或4位例3.6(15.24)8=(001101.010100)2=(1101.0101)2從八進(jìn)制到十六進(jìn)制,用二進(jìn)制為媒介(2)二進(jìn)制數(shù)轉(zhuǎn)化成十進(jìn)制數(shù)利用(N)2=∑Di*2i
Di為權(quán),2為“底”。(3)十進(jìn)制數(shù)轉(zhuǎn)化成二進(jìn)制數(shù)整數(shù)部分采用除2取余,小數(shù)部分采用乘2取整(4)十進(jìn)制數(shù)轉(zhuǎn)化成八進(jìn)制數(shù)參照上面3.數(shù)據(jù)符號的標(biāo)示用正(+)負(fù)(-)號后跟絕對值表示真值,在計(jì)算機(jī)中用0表示正號,1表示負(fù)號,正號有時(shí)可以省略。3.1.2十進(jìn)制數(shù)位的編碼與運(yùn)算1.十進(jìn)制數(shù)位的編碼與運(yùn)算(1)有權(quán)碼
表示一位十進(jìn)制數(shù)的二進(jìn)制碼的每一位有確定的權(quán)。
BCD碼:4位二進(jìn)制表示一位十進(jìn)制數(shù),每一位的權(quán)值分別為8、4、2、1,所以又稱8421碼。
運(yùn)算規(guī)則:如果兩個(gè)一位BCD碼相加之和小于或等于(1001)2,即(9)10,不需要修正;否則加6修正,并向高位進(jìn)位。例3.101+8=90001+10001001不需要修正4+9=130100+10011101+0110修正100119+7=161001+011110000+01110修正10110還有幾種有權(quán)碼,如2421,5211,4311碼,見課本63頁表3.2(2)無權(quán)碼表示一個(gè)十進(jìn)制的二進(jìn)制的每一位沒有固定的權(quán)值。
余3碼:在8421碼的基礎(chǔ)上,給每個(gè)編碼都加3。
運(yùn)算規(guī)則:兩個(gè)余3碼相加不產(chǎn)生進(jìn)位時(shí),減去3;否則加上3,同時(shí)將進(jìn)位送入高位。例3.1128+55=83
0101+1000111000111011101110000011+00110110另外的無權(quán)碼參見課本63頁表3.32.數(shù)字串在計(jì)算機(jī)的表示與存儲(1)字符形式。一個(gè)字節(jié)存放一個(gè)十進(jìn)制的數(shù)位或符號位。為了指明這樣一個(gè)數(shù),需要給出該數(shù)在主存中的起始地址和位數(shù)(串的長度)。例:+15400101011001100010011010100110100即2B313534-23001011010011001000110011即2D3233(2)壓縮的十進(jìn)制數(shù)形式。一個(gè)字節(jié)存放兩個(gè)十進(jìn)制的數(shù)位。它比前一種形式節(jié)省存儲空間,又便于直接完成十進(jìn)制數(shù)的算術(shù)運(yùn)算,是廣泛采用的較為理想的方法。用壓縮的十進(jìn)制數(shù)串表示一個(gè)數(shù),要占用主存連續(xù)的多個(gè)字節(jié)。每個(gè)數(shù)位占用半個(gè)字節(jié)(即4個(gè)二進(jìn)制位),其值可用二-十編碼(BCD碼)或數(shù)字符的ASCII碼的低4位表示。符號位也占半個(gè)字節(jié)并放在最低數(shù)字位之后,其值選用四位編碼中的六種冗余狀態(tài)中的有關(guān)值,如用12(c)表示正號用13(d)表示負(fù)號。在這種表示中,規(guī)定數(shù)位加符號位之和必須為偶數(shù),當(dāng)和不為偶數(shù)時(shí),應(yīng)在最高數(shù)字位之前補(bǔ)一個(gè)0。此時(shí),表示一個(gè)數(shù)要占用該偶數(shù)值的一半那么多個(gè)字節(jié)。例:假定用1110即E表示正(+)號,用1111即F表示負(fù)(-)號
+5630101011000111110即十六進(jìn)制的563E-5630101011000111111即十六進(jìn)制的563F-370000001101111111
即十六進(jìn)制的037F注意:規(guī)定數(shù)字,符號位個(gè)數(shù)之和為偶數(shù);否則,前邊補(bǔ)零湊足偶數(shù)。采用字符形式表示時(shí),符號在最前面表示;采用壓縮的十進(jìn)制數(shù)形式表示時(shí),符號在最后表示。3.2帶符號的二進(jìn)制數(shù)據(jù)在計(jì)算機(jī)中的表示方法及加減法運(yùn)算3.2.1原碼、補(bǔ)碼、反碼及其加減運(yùn)算
1.原碼表示法
若定點(diǎn)小數(shù)的原碼形式為x0x1x2…xn,則原碼表示的定義是
在計(jì)算機(jī)中對數(shù)據(jù)進(jìn)行運(yùn)算操作時(shí),符號位如何表示呢?是否也同數(shù)值位一道參加運(yùn)算操作呢?為了妥善的處理好這些問題,就產(chǎn)生了把符號位和數(shù)字位一起編碼來表示相應(yīng)的數(shù)的各種表示方法,如原碼、補(bǔ)碼、反碼、移碼等。為了區(qū)別一般書寫表示的數(shù)和機(jī)器中這些編碼表示的數(shù),通常將前者稱為真值,后者稱為機(jī)器數(shù)或機(jī)器碼。式中[x]原是機(jī)器數(shù),x是真值例如,x=+0.1001,則[x]原=0.1001x=-0.1001,則[x]原=1.1001對于0,原碼機(jī)器中往往有“+0”、“-0”之分,故有兩種形式:
[+0]原=0.000...0[-0]原=1.000...0若定點(diǎn)整數(shù)的原碼形式為x0x1x2…xn,則原碼表示的定義是
采用原碼表示法簡單易懂,但它的最大缺點(diǎn)是加法運(yùn)算復(fù)雜。這是因?yàn)?,?dāng)兩數(shù)相加時(shí),如果是同號則數(shù)值相加;如果是異號,則要進(jìn)行減法。而在進(jìn)行減法時(shí)還要比較絕對值的大小,然后大數(shù)減去小數(shù),最后還要給結(jié)果選擇符號。為了解決這些矛盾,人們找到了補(bǔ)碼表示法。2.補(bǔ)碼表示法
我們先以鐘表對時(shí)為例說明補(bǔ)碼的概念。假設(shè)現(xiàn)在的標(biāo)準(zhǔn)時(shí)間為4點(diǎn)正;而有一只表已經(jīng)7點(diǎn)了,為了校準(zhǔn)時(shí)間,可以采用兩種方法:一是將時(shí)針退7-4=3格;一是將時(shí)針向前撥12-3=9格。這兩種方法都能對準(zhǔn)到4點(diǎn),由此可以看出,減3和加9是等價(jià)的,就是說9是(-3)對12的補(bǔ)碼,可以用數(shù)學(xué)公式表示
-3=+9(mod12)mod12的意思就是12模數(shù),這個(gè)“?!北硎颈粊G掉的數(shù)值。上式在數(shù)學(xué)上稱為同余式。
上例中其所以7-3和7+9(mod12)等價(jià),原因就是表指針超過12時(shí),將12自動丟掉,最后得到16-12=4。從這里可以得到一個(gè)啟示,就是負(fù)數(shù)用補(bǔ)碼表示時(shí),可以把減法轉(zhuǎn)化為加法。這樣,在計(jì)算機(jī)中實(shí)現(xiàn)起來就比較方便。若定點(diǎn)小數(shù)補(bǔ)碼形式為x0.x1x2…xn,則補(bǔ)碼表示的定義是例如,x=+0.1011,則[x]補(bǔ)=0.1011x=-0.1011,則[x]補(bǔ)=10+x=10.0000-0.1011=1.0101對于0,[+0]補(bǔ)=[-0]補(bǔ)=0.0000
(mod2)
注意,0的補(bǔ)碼表示只有一種形式。
采用補(bǔ)碼表示法進(jìn)行減法運(yùn)算就比原碼方便得多了。因?yàn)椴徽摂?shù)是正還是負(fù),機(jī)器總是做加法,減法運(yùn)算可變?yōu)榧臃ㄟ\(yùn)算。但根據(jù)補(bǔ)碼定義,求負(fù)數(shù)的補(bǔ)碼要從2減去|x|。為了用加法代替減法,結(jié)果還得在求補(bǔ)碼時(shí)作一次減法,這顯然是不方便的。下面介紹的反碼表示法可以解決負(fù)數(shù)的求補(bǔ)問題。例3.19設(shè)X=-0.1011,Y=-0.0101,則有[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)=1.0101+1.1011=11.0000=1.0000mod2而X+Y的真值=-0.1011+(-0.0101)=-1.0000,為-1。由此說明一個(gè)數(shù)的補(bǔ)碼值的范圍在-1和(1-2-n)之間(假設(shè)數(shù)值部分為n位)。
對定點(diǎn)整數(shù),補(bǔ)碼表示的定義是3.反碼表示法
所謂反碼,就是二進(jìn)制的各位數(shù)碼0變?yōu)?,1變?yōu)?。也就是說,若Xi=1,則反碼為xi=0;若xi=0,則反碼xi=1。數(shù)值上面的一橫表示反碼的意思。在計(jì)算機(jī)中用觸發(fā)器寄存數(shù)碼,若觸發(fā)器Q端輸出表示原碼,則其Q端輸出就是反碼。由此可知,反碼是容易得到的。對定點(diǎn)小數(shù),反碼表示的定義為一般情況下,對于正數(shù)x=+0.x1x2…xn,
則
[x]反=0.x1x2…xn
對于負(fù)數(shù)x=-0.x1x2…xn,則有
[x]反=1.x1x2…xn對于0,有[+0]反和[-0]反之分:
[+0]反=0.00...0[-0]反=1.11...1我們比較反碼與補(bǔ)碼的公式
[x]反=(2-2-n)+x[x]補(bǔ)=2+x可得到
這就是通過反碼求補(bǔ)碼的重要公式。這個(gè)公式告訴我們,若要一個(gè)負(fù)數(shù)變補(bǔ)碼,其方法是符號位置1,其余各位0變1,1變0,然后在最末位(2-n)上加1。
對定點(diǎn)整數(shù),反碼表示的定義為4.數(shù)據(jù)從補(bǔ)碼和反碼表示表示形式轉(zhuǎn)換成原碼(1)將反碼表示的數(shù)據(jù)轉(zhuǎn)換成原碼。轉(zhuǎn)換方法:符號位保持不變,正數(shù)的數(shù)值部分不變,負(fù)數(shù)的數(shù)值部分取反。例3.23設(shè)〔x〕反=0.1010,則〔x〕原=0.1010,真值x=0.1010例3.24設(shè)〔x〕反=1.1010,則〔x〕原=1.0101,真值x=-0.0101(2)將補(bǔ)碼表示的數(shù)據(jù)轉(zhuǎn)換成原碼。例3.25設(shè)〔x〕補(bǔ)=0.1010,則〔x〕原=0.1010,真值x=0.1010例3.25設(shè)〔x〕補(bǔ)=1.1010,則〔x〕原=1.0110,真值x=-0.0110(3)原碼和補(bǔ)碼、反碼之間相互轉(zhuǎn)換的實(shí)現(xiàn)。例3.27設(shè)〔x〕原=1.1010,則〔x〕反=1.0101,〔x〕補(bǔ)=1.0110補(bǔ)充:補(bǔ)碼加法
:負(fù)數(shù)用補(bǔ)碼表示后,可以和正數(shù)一樣來處理。這樣,運(yùn)算器里只需要一個(gè)加法器就可以了,不必為了負(fù)數(shù)的加法運(yùn)算,再配一個(gè)減法器。
補(bǔ)碼加法的公式是
現(xiàn)分四種情況來證明。假設(shè)采用定點(diǎn)小數(shù)表示,因此證明的先決條件是︱x︱﹤1,︱y︱﹤1,︱x+y︱﹤1。(1)x﹥0,y﹥0,則x+y﹥0。
相加兩數(shù)都是正數(shù),故其和也一定是正數(shù)。正數(shù)的補(bǔ)碼和原碼是一樣的,可得:
[x]補(bǔ)+[y]補(bǔ)=x+y=[x+y]補(bǔ)(mod2)
(2)x﹥0,y﹤0,則x+y>0或x+y<0。
相加的兩數(shù)一個(gè)為正,一個(gè)為負(fù),因此相加結(jié)果有正、負(fù)兩種可能。根據(jù)補(bǔ)碼定義,
∵[x]補(bǔ)=x,[y]補(bǔ)=2+y
∴[x]補(bǔ)+[y]補(bǔ)=x+2+y=2+(x+y)當(dāng)x+y>0時(shí),2+(x+y)>2,進(jìn)位2必丟失,又因(x+y)>0,故[x]補(bǔ)+[y]補(bǔ)=x+y=[x+y]補(bǔ)(mod2)
當(dāng)x+y<0時(shí),2+(x+y)<2,又因(x+y)<0,故
[x]補(bǔ)+[y]補(bǔ)=2+(x+y)=[x+y]補(bǔ)(mod2)(3)x<0,y>0,則x+y>0或x+y<0。這種情況和第2種情況一樣,把x和y的位置對調(diào)即得證。(4)x<0,y<0,則x+y<0。
相加兩數(shù)都是負(fù)數(shù),則其和也一定是負(fù)數(shù)?!遊x]補(bǔ)=2+x,[y]補(bǔ)=2+y∴[x]補(bǔ)+[y]補(bǔ)=2+x+2+y=2+(2+x+y)上式右邊分為”2”和(2+x+y)兩部分.既然(x+y)是負(fù)數(shù),而其絕對值又小于1,那么(2+x+y)就一定是小于2而大于1的數(shù),進(jìn)位”2”必丟失.又因(x+y)<0,所以[x]補(bǔ)+[y]補(bǔ)=2+(x+y)=[x+y]補(bǔ)(mod2)
至此我們證明了,在模2意義下,任意兩數(shù)的補(bǔ)碼之和等于該兩數(shù)之和的補(bǔ)碼.這是補(bǔ)碼加法的理論基礎(chǔ),其結(jié)論也適用于定點(diǎn)整數(shù)。補(bǔ)碼減法
負(fù)數(shù)的減法運(yùn)算也要設(shè)法化為加法來做,其所以使用這種方法而不使用直接減法,是因?yàn)樗梢院统R?guī)的加法運(yùn)算使用同一加法器電路,從而簡化了計(jì)算機(jī)的設(shè)計(jì)。數(shù)用補(bǔ)碼表示時(shí),減法運(yùn)算的公式為只要證明[-y]補(bǔ)=-[y]補(bǔ),上式即得證?,F(xiàn)證明如下:∵[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)(mod2)∴[y]補(bǔ)=[x+y]補(bǔ)-[x]補(bǔ)
(a)∵[x-y]補(bǔ)=[x+(-y)]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)∴[-y]補(bǔ)=[x-y]補(bǔ)-[x]補(bǔ)
(b)將式(a)與(b)相加,得
[-y]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)+[x-y]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=[x+y+x-y]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=[x+x]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=0故
從[y]補(bǔ)求[-y]補(bǔ)的法則是:對[y]補(bǔ)包括符號位“求反且最末位加1”,即可得到[-y]補(bǔ)。寫成運(yùn)算表達(dá)式,則為其中符號﹁表示對[y]補(bǔ)作包括符號位在內(nèi)的求反操作,2-n表示最末位的13..2.2加減法運(yùn)算的溢出處理
當(dāng)運(yùn)算結(jié)果超出機(jī)器數(shù)所能表示的范圍時(shí),稱為溢出。
在定點(diǎn)小數(shù)機(jī)器中,數(shù)的表示范圍為|x|<1.在運(yùn)算過程中如出現(xiàn)大于1的現(xiàn)象,稱為“溢出”。在定點(diǎn)機(jī)中,正常情況下溢出是不允許的。兩個(gè)正數(shù)相加,結(jié)果大于機(jī)器所能表示的最大正數(shù),稱為上溢。而兩個(gè)負(fù)數(shù)相加,結(jié)果小于機(jī)器所能表示的最小負(fù)數(shù),稱為下溢。為了判斷“溢出”是否發(fā)生,可采用三種檢測的方法。第一種方法是當(dāng)符號相同的兩數(shù)相加時(shí),如果結(jié)果的符號與加數(shù)(或被加數(shù))不相同,則為溢出例3.28中(3)、(4)。即溢出條件=fAfBfS+fAfBfS.第二種方法是當(dāng)任意符號相加時(shí),如果C=Cf,運(yùn)算結(jié)果正確,其中C為數(shù)值最高位的進(jìn)位,Cf為符號位的進(jìn)位。如果C=Cf,則為溢出,所以溢出條件=C
Cf。
第三種方法是采用雙符號位fs1fs2.正數(shù)雙符號位為00,負(fù)數(shù)的雙符號位為11.符號位參與運(yùn)算,當(dāng)結(jié)果的兩個(gè)符號位fs1和fs2不相同時(shí),為溢出。所以溢出條件=fs1fs2。
采用多符號位的補(bǔ)碼又叫“變形補(bǔ)碼”。采用變形補(bǔ)碼后,如果兩個(gè)數(shù)相加后,其結(jié)果的符號位出現(xiàn)“01”或“10”兩種組合時(shí),表示發(fā)生溢出。這是因?yàn)閮蓚€(gè)絕對值小于1的數(shù)相加,其結(jié)果不會大于或等于2,所以最高符號位永遠(yuǎn)表示結(jié)果的正確符號。3.2.3定點(diǎn)數(shù)和浮點(diǎn)數(shù)
1、定點(diǎn)數(shù):約定機(jī)器中所有數(shù)據(jù)的小數(shù)點(diǎn)位置是固定不變的。將數(shù)據(jù)表示成定點(diǎn)純小數(shù)或定點(diǎn)純整數(shù)。
假設(shè)用一個(gè)n+1位字來表示一個(gè)定點(diǎn)數(shù)X,在定點(diǎn)機(jī)中可表示為如下形式:
X0
X1X2...Xn-1
Xn符號
數(shù)值部分
如果數(shù)X表示的是純小數(shù):0≤|X|≤1-2-n
如果數(shù)X表示的是純整數(shù):
0≤|X|≤2n-1
2、浮點(diǎn)數(shù),即小數(shù)點(diǎn)的位置是浮動的:
N=RE.M
其中M稱為浮點(diǎn)數(shù)的尾數(shù),用定點(diǎn)小數(shù)表示。E稱為浮點(diǎn)的指數(shù),是一個(gè)整數(shù),常稱為階碼。比例因子的基數(shù)R對二進(jìn)制的機(jī)器是一個(gè)常數(shù),一般規(guī)定R為2,8或16。因此一個(gè)機(jī)器浮點(diǎn)數(shù)應(yīng)當(dāng)由階碼和尾數(shù)及其符號位組成:
階符
階碼
數(shù)符
尾數(shù)
EsE1E2...Em
MsM1M2...Mn
313023220
IEEE標(biāo)準(zhǔn):32位浮點(diǎn)數(shù)
32位浮點(diǎn)數(shù)中,Ms是浮點(diǎn)數(shù)的符號位,占1位,安排在最高位,Ms=0表示正數(shù),Ms=1表示負(fù)數(shù)。M是尾數(shù),放在低位部分,占有23位,用小數(shù)表示,小數(shù)點(diǎn)放在尾數(shù)域的最前面。E是階碼,占有8位,階符采用隱含方式,即采用移碼方法來表示正負(fù)指數(shù)。MsEM
尾數(shù)通常用規(guī)格化形式表示:當(dāng)R=2,且尾數(shù)值不為0時(shí),其絕對值應(yīng)大于或等于(0.5)10。對非規(guī)格化浮點(diǎn)數(shù),通過將尾數(shù)左移或右移,并修改階碼值使之滿足規(guī)格化要求。假設(shè)浮點(diǎn)數(shù)的尾數(shù)為0.0011,階碼為0100(設(shè)定R=2),規(guī)格化時(shí),將尾數(shù)左移2位,而成為0.1100,階碼減去(10)2修改成0010,浮點(diǎn)數(shù)的值保持不變。移碼的數(shù)學(xué)定義:〔X〕移=2n+X-2n≦X﹤2n整數(shù)補(bǔ)碼定義:與整數(shù)補(bǔ)碼定義作比較,可知
當(dāng)0
≦X﹤2n時(shí),〔X〕移=2n+X=2n+〔X〕補(bǔ)當(dāng)-2n≦X﹤0時(shí)〔X〕移=2n+X=2n+〔X〕補(bǔ)由此可知,將〔X〕補(bǔ)的符號位取反就可得〔X〕移例3.30X=+1011〔X〕補(bǔ)=01011〔X〕移=11011
X=-1011〔X〕補(bǔ)=10101〔X〕移=00101移碼具有以下特點(diǎn):(1)最高位為符號位,1表示正號,0表示負(fù)號。(2)在計(jì)算機(jī)中,移碼執(zhí)行加減運(yùn)算,且需要對得到的結(jié)果進(jìn)行修正,修正量為2n,即對結(jié)果的符號位取反,得到〔X〕移。設(shè)X=+1010Y=+0011,則〔X〕移=11010〔Y〕移=100113.計(jì)算機(jī)中數(shù)據(jù)的數(shù)值范圍和精度
數(shù)值范圍是指機(jī)器所能表示的一個(gè)最大值和最小值之間的范圍。數(shù)值精度是指一個(gè)數(shù)的有效位數(shù)。例如,32位定點(diǎn)小數(shù)(補(bǔ)碼)的范圍為-1~1-2-31,定點(diǎn)整數(shù)(補(bǔ)碼)的范圍是-231~+231-1,數(shù)據(jù)精度為31位?!惭a(bǔ)充〕〔X+Y〕移=〔X〕移+〔Y〕補(bǔ)當(dāng)Y≧0時(shí),〔X〕移+〔Y〕補(bǔ)=2n+X+Y=〔X+Y〕移當(dāng)Y﹤0時(shí),〔X〕移+〔Y〕補(bǔ)=2n+X+2n+1+Y=2n+1+2n+X+Y=〔X+Y〕移例X=+1010Y=+0011,則〔X〕移=11010〔Y〕補(bǔ)=00011
〔X+Y〕移=11010+00011=11101(3)數(shù)據(jù)0有唯一編碼,即〔+0〕移=〔-0〕移=1000…0。執(zhí)行加法運(yùn)算〔X〕移+〔Y〕移=11010+10011=101101,加2n后得〔X+Y〕移,X+Y〕移=01101+10000=11101一、計(jì)算:1、x=23/128[x]補(bǔ)=[x]原=2、x=-35/64[x]補(bǔ)=[x]原=3、x+y=1010[x+y]補(bǔ)=[x+y]原=4、x-y=-1101[x-y]補(bǔ)=[x-y]原=二、設(shè)機(jī)器字長為5位,采用定點(diǎn)整數(shù)表示,x=+110,求[x]原,[x]補(bǔ)解:因?yàn)閚+1=5,所以n=4,[x]原=0,0110[x]補(bǔ)=0,0110↑↑↑
x0x1…x4
顯然,正數(shù)的原碼與補(bǔ)碼形式相同。三、設(shè)機(jī)器字長8位并用定點(diǎn)整數(shù)表示,模為28,若x=-110,求[x]原,[x]補(bǔ)。解:因?yàn)閚+1=8,所以n=7,[x]原=10000110[x]補(bǔ)=M+x=28+(-110)=(100000000)2-110=11111010
【習(xí)題】四、由補(bǔ)碼求原碼與真值:對于正數(shù),原碼與補(bǔ)碼相同,其真值在略去正號后,形式上與機(jī)器數(shù)相同;對于負(fù)數(shù),保持符號位為1,其余各位變反末位加1,即得到原碼表示,將負(fù)數(shù)原碼符號恢復(fù)為負(fù)號,即得到真值表示。例:如[x]補(bǔ)=00000110,則[x]原=00000110,x=+110
如[x]補(bǔ)=11111010,則[x]原=10000110,所以x=-110[x]原的具體計(jì)算如下:
[x]補(bǔ)=11111010
變反10000101
末位加1+1
10000110
五、
以定點(diǎn)整數(shù)為例,用數(shù)軸形式說明原碼、反碼、補(bǔ)碼表示范圍和可能的數(shù)碼組合情況。
解:原碼、反碼、補(bǔ)碼表示分別示于下圖。與原碼、反碼不同,在補(bǔ)碼表示中“0”只有一種形式,且用補(bǔ)碼表示負(fù)數(shù)時(shí)范圍可到-2n。
11...1
10...01
10...0
00...0
00...01
01...1
-(2n-1)
-1
-00
+1
+(2n-1)
原碼
10...0
11...10
11...1
00...0
00...01
01...1
-(2n-1)
-1
-0
0
+1
+(2n-1)
反碼
10...0
10...01
11...1
00...0
00...01
01...1
-2n
-(2n-1)
-1
0
+1
+(2n-1)
補(bǔ)碼
六、設(shè)機(jī)器字長16位,定點(diǎn)表示,尾數(shù)15位,數(shù)符1位,問:
(1)定點(diǎn)原碼整數(shù)表示時(shí),最大正數(shù)是多少?最小負(fù)數(shù)是多少?
(2)定點(diǎn)原碼小數(shù)表示時(shí),最大正數(shù)是多少?最小負(fù)數(shù)是多少?
解:(1)定點(diǎn)原碼整數(shù)表示
最大正數(shù)值=(215-1)10=(+32767)10
0
111111
111
111
111
最小負(fù)數(shù)值=(215-1)10=(-32767)10
1
111111
111
111
111
(2)定點(diǎn)原碼小數(shù)表示
最大正數(shù)值=(1-2-15)10=(+0.111...11)2
最小負(fù)數(shù)值=(1-2-15)10=(-0.111...11)23.3二進(jìn)制乘法運(yùn)算3.3.1定點(diǎn)數(shù)一位乘法1.定點(diǎn)原碼一位乘法在定點(diǎn)計(jì)算機(jī)中,兩個(gè)原碼表示的數(shù)相乘的運(yùn)算規(guī)則是:乘積的符號位由兩數(shù)的符號位按異或運(yùn)算得到,而乘積的數(shù)值部分則是兩個(gè)正數(shù)相乘之積。設(shè)n位被乘數(shù)和乘數(shù)用定點(diǎn)小數(shù)表示(定點(diǎn)整數(shù)也同樣適用)被乘數(shù)[X]原=X0·X1…Xn-1Xn
乘數(shù)[Y]原=Y0·Y1…Yn-1Yn
乘積[Z]原=(X0⊕Y0)·(0.X1…Xn-1Xn)(0.Y1…Yn-1Yn)
式中,X0為被乘數(shù)符號,Y0為乘數(shù)符號。
乘積符號的運(yùn)算法則是:同號相乘為正,異號相乘為負(fù)。由于被乘數(shù)和乘數(shù)
和符號組合只有四種情況(XfYf)=(00,01,10,11),因此積的符號可按"異或"(按位加)運(yùn)算得到。為了說明在計(jì)算機(jī)中如何實(shí)現(xiàn)定點(diǎn)原碼一位乘法先從人工計(jì)算開始,舉例如下:設(shè)X=0.1101,Y=0.1011,讓我們先用習(xí)慣方法求其乘積,其過程如下:
0.1101(X)
×0.1011(Y)--------------------
1101
1101
0000
+1101
--------------------
0.10001111(Z)
運(yùn)算的過程與十進(jìn)制乘法相似:從乘數(shù)Y的最低位開始,若這一位為"1",則將被乘數(shù)X寫下;若這一位為"0",則寫下全0。然后再對乘數(shù)Y的高一位進(jìn)行乘法運(yùn)算,其規(guī)則同上,不過這一位乘數(shù)的權(quán)與最低位乘數(shù)的權(quán)不一樣,
因此被乘數(shù)X要左移一位。依次類推,直到乘數(shù)各位乘完為止,最后將它們統(tǒng)統(tǒng)加起來,便得到最后乘積Z。
如果被乘數(shù)和乘數(shù)用定點(diǎn)整數(shù)表示,我們也會得到同樣的結(jié)果。
但是人們習(xí)慣的算法對機(jī)器并不完全適用。原因之一,機(jī)器通常只有n位長,兩個(gè)n位數(shù)相乘,乘積可能為2n位。原因之二,只有兩個(gè)操作數(shù)相加的加法器,難以勝任將n個(gè)位積一次相加起來的運(yùn)算。原因之三,部分積右移時(shí),乘數(shù)寄存器同時(shí)右移一位。因此,在早期計(jì)算機(jī)中為了簡化硬件結(jié)構(gòu),采用串行的1位乘法方案,而多次執(zhí)行“加法、移位”操作來實(shí)現(xiàn)。這種方法并不需要很多器件。然而串行方法畢竟太慢,不能滿足科學(xué)技術(shù)對
高速乘法所提出的要求。在計(jì)算機(jī)中實(shí)現(xiàn)定點(diǎn)原碼一位乘法如例3.32所示。定點(diǎn)原碼一位乘流程圖如右圖所示:從流程圖上可以清楚地看到,這里的原碼一位乘是通過循環(huán)迭代的辦法實(shí)現(xiàn)的。每次迭代得到的部分積(P0,P1,…,Pn)可用下述式(3.14)表示:式(3.14)中的2-1表示二進(jìn)制數(shù)據(jù)右移一位,相當(dāng)于乘以2-1.2.定點(diǎn)補(bǔ)碼一位乘法有的機(jī)器為方便加減法運(yùn)算,數(shù)據(jù)以補(bǔ)碼形式存放。如采用原碼乘法,則在相乘之前,要將負(fù)數(shù)還原成原碼形式,相乘之后,如乘積為負(fù)數(shù),又要將其轉(zhuǎn)換成補(bǔ)碼形式,增加了操作步驟。為此,有不少計(jì)算機(jī)直接采用補(bǔ)碼相乘。為了得出補(bǔ)碼乘法規(guī)律,先討論補(bǔ)碼與真值的轉(zhuǎn)換關(guān)系和補(bǔ)碼右移的性質(zhì)。(1)補(bǔ)碼與真值的轉(zhuǎn)換關(guān)系設(shè)[X]補(bǔ)=X0。.X1X2…Xn,當(dāng)真值X≥0時(shí),X0=0,[X]補(bǔ)=0.X1…Xn-1Xn=∑Xi·
2-I=X
當(dāng)真值X<0時(shí),X0=1,
[X]補(bǔ)=1.X1…Xn-1Xn=2+XX=[X]補(bǔ)-2=1.X1…Xn-1Xn–2=-1+0.X1…Xn-1Xn=-1+∑Xi·
2-I
得出對X為正負(fù)數(shù)都合適的公式如下:
X=-X0
+∑Xi·
2-I=-X0+0.X1…Xn-1Xn
(2)補(bǔ)碼的右移在補(bǔ)碼運(yùn)算中,不論正負(fù),連同符號位將數(shù)右移一位,并保持符號位不變,相當(dāng)于乘1/2.現(xiàn)證明如下:設(shè)[X]補(bǔ)=X0.X1X2…Xn
X=-X0+0.X1X2…Xn=-X0+∑Xi·
2-i
(I=1~n)
得出(1/2)X=-(1/2)X0+(1/2)
∑Xi·
2-i=-X0+(1/2)X0+(1/2)
∑Xi·
2-i=-X0+(1/2)(X0+∑Xi·
2-i)=-X0+∑Xi·
2-(I+1)=-X0+0.X0
X1X2…Xn[(1/2)X]補(bǔ)=X0.X0X1…Xn(3)補(bǔ)碼一位乘法設(shè)被乘數(shù)[X]補(bǔ)=X0·X1…Xn-1Xn,乘數(shù)[Y]補(bǔ)=Y0·Y1…Yn-1Yn,則有:
[X·
Y]補(bǔ)=[X]補(bǔ)·(-Y0+∑Yi·
2-I)
證明如下:①
X正負(fù)任意,Y為正數(shù)根據(jù)補(bǔ)碼定義及模2運(yùn)算性質(zhì):[X]補(bǔ)=2+X=2n+1+Xmod2[Y]補(bǔ)=Y(jié)則:[X]補(bǔ)·
[Y]補(bǔ)=2n+1·Y+X·
Y=2+X·
Y
mod2
[X]補(bǔ)·
[Y]補(bǔ)=[X·Y]補(bǔ)即:[X·Y]補(bǔ)=[X]補(bǔ)·
[Y]補(bǔ)=[X]補(bǔ)·
Y=[X]補(bǔ)·
(-Y0+∑Yi·
2-I)
=[X]補(bǔ)·(∑Yi·
2-I)
=[X]補(bǔ)(0.Y1…Yn-1Yn)②
X正負(fù)任意,Y為負(fù)數(shù)[X]補(bǔ)=X0。.X1X2。。。Xn
[Y]補(bǔ)=1。Y1Y2。。。Yn=2+Y
得Y=[Y]補(bǔ)-2=0.Y1…Yn-1Yn-1
X·Y=X(0.Y1…Yn-1Yn)-X
[X·Y]補(bǔ)=[X(0.Y1…Yn-1Yn)]補(bǔ)+[-
X]補(bǔ)因?yàn)?.Y1…Yn-1Yn>0,所以[X(0.Y1…Yn-1Yn)]補(bǔ)=[X]補(bǔ)(0.Y1…Yn-1Yn)
[X·Y]補(bǔ)=[X]補(bǔ)(0.Y1…Yn-1Yn)+[-X]補(bǔ)即按①的方法運(yùn)算后,還需要補(bǔ)充進(jìn)行加[-
X]補(bǔ)操作。③
X和Y正負(fù)都任意將上述①與②兩種情況綜合起來,可得補(bǔ)碼乘法的統(tǒng)一算法,具體式子如下:[X·Y]補(bǔ)=[X]補(bǔ)(0.Y1…Yn-1Yn)-[X]補(bǔ)·
Y0
=[X]補(bǔ)(-Y0+0.Y1…Yn-1Yn)=[X]補(bǔ)(-Y0+∑Yi·
2-I)具體實(shí)例請看例3.33和例3.34.將前述補(bǔ)碼乘法公式進(jìn)行變換,可得出另一公式,是由布斯提出的,又稱為“布斯公式”。[X·Y]補(bǔ)=[X]補(bǔ)·
(-Y0+∑Yi·
2-I)=[X]補(bǔ)·
[-Y0+Y12-1+Y22-2+……+Yn2-n]=[X]補(bǔ)·
[-Y0+(Y1-
Y12-1)
+(Y22-1-Y22-2)
+……+Yn2-(n-1)-
Yn2-n)
]=[X]補(bǔ)·
[(Y1-
Y0)
+(Y2-
Y1)
2-1+……+(Yn-
Yn-1)
2-(n-1)+(0-
Yn)
2-n
]=[X]補(bǔ)·
∑(Yi+1-Yi)2-I乘數(shù)的最低1位為Yn,在其后面再添加1位
Yn+1,其值為0。再將式(3.17)加以變換:按機(jī)器執(zhí)行順序求出每一步的部分積。
Yi+1與Y為相鄰兩位,(Yi+1-Yi)有0,1,-1三種情況,其運(yùn)算規(guī)則如下:(1)Yi+1-Yi=0,部分積加0,右移一位
(2)Yi+1-Yi=1,部分積加[X]補(bǔ),右移一位
(3)Yi+1-Yi=-1,部分積加[-X]補(bǔ),右移一位最后一步不移位。具體實(shí)例見例3.35。本小節(jié)所舉例中,X與Y的絕對值都沒有變化,所以最后的乘積(真值)的數(shù)值部分都相等。
3.3.2定點(diǎn)數(shù)二位乘法1.原碼兩位乘兩位乘數(shù)有四種組合,每種組合對應(yīng)于以下操作:00——相當(dāng)于0·X。部分積Pi右移2位,不進(jìn)行其他操作。01——相當(dāng)于1·X。部分積Pi+X,右移2位。10——相當(dāng)于2·X。部分積Pi+2X,右移2位。11——相當(dāng)于3·X。部分積Pi+3X,右移2位。+2X是利用X左移1位得到的,在機(jī)器中是通常采用向左斜送1位來實(shí)現(xiàn)。+3X是利用(4X-X)代替的。在本次運(yùn)算中執(zhí)行-X,+4X則歸并到下一步來執(zhí)行。此時(shí)部分積已經(jīng)右移,上一步欠下的+4X變?yōu)椋玐。在實(shí)際線路中用觸發(fā)器C來記錄是否欠下+4X,若是則1→C。表3.4原碼兩位乘法規(guī)則Yi-1YiC操作000001010011100101110111(Pi+0)2-2(Pi+X)2-2(Pi+X)2-2(Pi+2X)2-2(Pi+2X)2-2(Pi-X)2-2(Pi-X)2-2(Pi+0)2-20→C0→C0→C0→C0→C1→C1→C1→C例3.36,如果最后一次欠下+X,則最后一次右移2位需補(bǔ)充+X操作,+X后不移位。2.補(bǔ)碼兩位乘根據(jù)前述的布斯算法,將兩步合成一步,即可退到出補(bǔ)碼兩位乘的公式。假設(shè)上一步的部分積為[Pi]補(bǔ),本步的部分積為[Pi+1]補(bǔ)={[Pi]補(bǔ)+(Yn-i+1-Yn-i)·[X]補(bǔ)}2-1下一步的部分積應(yīng)為:[Pi+2]補(bǔ)={[Pi+1]補(bǔ)+(Yn-i-Yn-i-1)·[X]補(bǔ)}2-1將上式的[Pi+1]補(bǔ)代入[Pi+2]補(bǔ),則[Pi+2]補(bǔ)={[Pi]補(bǔ)+(Yn-i+1-Yn-i)·[X]補(bǔ)}2-1+(Yn-i-Yn-i-1)·[X]補(bǔ)}2-1={[Pi]補(bǔ)+(Yn-i+1-Yn-i)·[X]補(bǔ)}+2(Yn-i-Yn-i-1)·[X]補(bǔ)}2-2={[Pi]補(bǔ)+(Yn-i+1+Yn-i-2Yn-i-1)·[X]補(bǔ)}2-2上述公式表明,產(chǎn)生了部分積[Pi]補(bǔ)之后,可加上乘數(shù)寄存器最低兩位和附加位的組合值于[X]補(bǔ)的積,再右移兩位,可得到[Pi+2]補(bǔ)。Yn-i-1
Yn-iYn-i+1
組合值[Pi+2]補(bǔ)0000010100111001011101110112-2-1-10([Pi]補(bǔ)+0)2-2([Pi]補(bǔ)+[X]補(bǔ))2-2([Pi]補(bǔ)+[X]補(bǔ))2-2([Pi]補(bǔ)+2[X]補(bǔ))2-2([Pi]補(bǔ)+2[-X]補(bǔ))2-2([Pi]補(bǔ)+[-X]補(bǔ))2-2([Pi]補(bǔ)+[-X]補(bǔ))2-2([Pi]補(bǔ)+0)2-2表3—5組合值Yn-i-1Yn-iYn-i+1與[Pi+2]補(bǔ)的關(guān)系
由上表可得,執(zhí)行補(bǔ)碼兩位乘過程中,有[Pi]補(bǔ)+0,[Pi]補(bǔ)+[X]補(bǔ),[Pi]補(bǔ)+2[X]補(bǔ)
,[Pi]補(bǔ)+2[-X]補(bǔ),[Pi]補(bǔ)+[-X]補(bǔ)五種操作,應(yīng)有[X]補(bǔ),[-X]補(bǔ)及其左斜一位(相當(dāng)與2[X]補(bǔ)和2[-X]補(bǔ))送加法器的線路;另外部分積和乘數(shù)每次右移兩位,應(yīng)用向右斜送兩位的邏輯電路和移位寄存器實(shí)現(xiàn)。與此相應(yīng)的,加法器可使用三位符號位,以避免[X]補(bǔ)左斜送一位加法器時(shí)運(yùn)算結(jié)果溢出的情形。求部分積的次數(shù)和右移操作的控制問題。當(dāng)乘數(shù)由1位符號位和n位(奇數(shù))位數(shù)值位組成時(shí),求部分積的次數(shù)為(1+n)/2,而且最后一次的右移操作只右移一位。若數(shù)值位本身為偶數(shù)n,則可以采取以下方法:(1)可在乘數(shù)的最后一位補(bǔ)一個(gè)0,乘數(shù)的數(shù)據(jù)位就成為奇數(shù),而且其值不變,求部分積的次數(shù)為[1+(n+1)]/2,即n/2+1,最后一次右移操作也只右移一位。(2)乘數(shù)增加一位符號位,使總位數(shù)仍為偶數(shù),此時(shí)求部分積的次數(shù)為n/2+1,而且最后一次不再執(zhí)行右移操作?,F(xiàn)舉例3.37(1)
3.37(2)3.3.3陣列乘法器如書上P823.4二進(jìn)制除法運(yùn)算3.4.1定點(diǎn)除法運(yùn)算1.定點(diǎn)原碼一位除法恢復(fù)余數(shù)法和加減交替法,在計(jì)算機(jī)中常用的是加減交替法。兩個(gè)原碼相除,商的符號位為兩數(shù)符號位的異或值,數(shù)值則為兩數(shù)絕對值相除后的結(jié)果。(1)恢復(fù)余數(shù)法設(shè)被除數(shù)X=0.1011,除數(shù)Y=0.1101除法的人工計(jì)算過程如下:0.11010.1101)0.10110
110110100
11010111人工進(jìn)行二進(jìn)制除法的規(guī)則:判斷被除數(shù)和除數(shù)的大小,若被除數(shù)小,則上商0,并在余數(shù)最低位補(bǔ)0,再用余數(shù)和最低一位的除數(shù)比,若夠除,則商1,否則商0。然后繼續(xù)重復(fù)上述步驟,直到除盡或以得到的商的位數(shù)滿足精度要求為止。在進(jìn)行除法操作的時(shí)候,要求加法器的位數(shù)為除數(shù)位數(shù)的兩倍。右移除數(shù)可以通過左移被除數(shù)來替代,并且利用被除數(shù)和除數(shù)做劍法判斷結(jié)果的符號位。當(dāng)差為負(fù)數(shù)的時(shí)候,上商為0,同時(shí)余數(shù)左移且要恢復(fù)余數(shù);若減的差為0或正值,商為1,余數(shù)左移。例3.38恢復(fù)余數(shù)法的缺點(diǎn)是:當(dāng)被減數(shù)的絕對值小于減數(shù)的絕對值時(shí),要恢復(fù)余數(shù)。所以我們采用了加減交替法。(2)加減交替法加減交替法是對恢復(fù)余數(shù)法的一種修正。當(dāng)求得的差為負(fù)數(shù)時(shí),不是恢復(fù)他,而是繼續(xù)求下一位商。用加上(+Y)的辦法來取代(-Y)操作。原理證明如下:在恢復(fù)余數(shù)除法中,若第i-1次求商的余數(shù)為Ri-1,下一次求商的余數(shù)為R,則Ri=2Ri-1-Y如果Ri<0,商的第I位上0,恢復(fù)余數(shù)(+Y),將余數(shù)左移一位,再減Y,得2Ri+1。用公式表示如下:Ri+1=2(Ri+Y)-Y=2Ri+Y加減交替法得規(guī)則:當(dāng)余數(shù)為正時(shí),商上1,求下一位商得辦法,是余數(shù)左移一位,再減去除數(shù);當(dāng)余數(shù)為負(fù)時(shí),商上0,求下一位商得辦法,是余數(shù)左移一位,再加上除數(shù)。又名不恢復(fù)余數(shù)法。例3.39所以總結(jié)原碼一位除法得步驟如下:(1)首先比較被除數(shù)和除數(shù)得大小,以檢查是否商溢出得情況。(2)商得符號為相除二數(shù)得符號得半加和。(3)被除數(shù)得位數(shù)是除數(shù)得兩倍,其低位得數(shù)值部分開始放在商寄存器中。運(yùn)算過程中,被除數(shù)和商寄存器同時(shí)移位,并將商寄存器得最高位移到被除數(shù)寄存器得最低位中。(4)與乘法得邏輯電路相似。A中放被除數(shù)、余數(shù),B中放除數(shù),C放商。此外,移位電路應(yīng)有左移1位得功能,及將Y/[Y]補(bǔ)送ALU得功能。2.定點(diǎn)補(bǔ)碼一位除法(加減交替法)運(yùn)算說明:判別是否夠減,要比較他們絕對值得大小。若兩數(shù)同符號,要用減法,若異號,要用加法。當(dāng)商為正時(shí),商得值為原碼表示形式。當(dāng)商為負(fù)時(shí),商得值一般為反碼形式的,然后采用最低位加1得辦法求出正確得補(bǔ)碼值。運(yùn)算規(guī)則:(1)被除數(shù)和除數(shù)同號,用被除數(shù)減去除數(shù);若兩數(shù)相異,用被除數(shù)加上除數(shù)。若所得余數(shù)和商同號商1,若余數(shù)和除數(shù)異號,商0,這是結(jié)果得符號位。(2)如果上次商為1,將余數(shù)左移一位后減去除數(shù);如果上次商0,將余數(shù)左移一位后加上除數(shù)。然后判斷本次得操后得余數(shù)與除數(shù)得符號是否相同。若相同則商1,若異號則商0。如此重復(fù)n-1次。(3)商的最后一位一般采用恒置1得辦法,并省略最低位得加1操作。例3.40例3.41例3.42X補(bǔ).Y補(bǔ)符號商符第一步操作r補(bǔ),Y補(bǔ)符號上商下一步操作同號0減同號(夠減)12[r]補(bǔ)-Y補(bǔ)異號(不夠減)02[r]補(bǔ)+Y補(bǔ)異號1加同號(不夠減)12[r]補(bǔ)-Y補(bǔ)異號(夠減)02[r]補(bǔ)+Y補(bǔ)3.4.2提高除法運(yùn)算速度得方法舉例1.跳0跳1除法規(guī)則:(1)如果余數(shù)R≥0,且其高K個(gè)數(shù)位均為0,則本次直接商1,后跟K-1個(gè)0。R左移K位后,減去除數(shù)Y,得新余數(shù)。(2)如果余數(shù)R≤0,且其高K個(gè)數(shù)位均為1,則本次直接商0,后跟K-1個(gè)1。R左移K位后,加上除數(shù)Y,得新余數(shù)。(3)不滿不(1)(2)按一位除法上商。例3.432.除法運(yùn)算通過乘法操作來實(shí)現(xiàn)即找尋一組數(shù)使分母趨向于1,則分子等于分母。3.5浮點(diǎn)數(shù)的運(yùn)算方法3.5.1浮點(diǎn)加法、減法運(yùn)算設(shè)有兩個(gè)浮點(diǎn)數(shù)x和y,它們分別為x=2Ex·Mxy=2Ey·My其中Ex和Ey分別為數(shù)x和y的階碼,Mx和My為數(shù)x和y的尾數(shù)。兩浮點(diǎn)數(shù)進(jìn)行加法和減法的運(yùn)算規(guī)則是x±y=(Mx2Ex-Ey±My)2Ey,Ex>=Ey完成浮點(diǎn)加減運(yùn)算的操作過程大體分為四步:
1.0操作數(shù)的檢查;
2.比較階碼大小并完成對階;
3.尾數(shù)進(jìn)行加或減運(yùn)算;
4.結(jié)果規(guī)格化并進(jìn)行舍入處理。5.判溢,檢查階碼是否溢出。浮點(diǎn)加減運(yùn)算的操作流程(1)0操作數(shù)檢查浮點(diǎn)加減運(yùn)算過程比定點(diǎn)運(yùn)算過程復(fù)雜。如果判知兩個(gè)操作數(shù)x或y中有一個(gè)數(shù)為0,即可得知運(yùn)算結(jié)果而沒有必要再進(jìn)行后續(xù)的一系列操作以節(jié)省運(yùn)算時(shí)間。0操作數(shù)檢查步驟則用來完成這一功能。(2)比較階碼大小并完成對階兩浮點(diǎn)數(shù)進(jìn)行加減,首先要看兩數(shù)的階碼是否相同,即小數(shù)點(diǎn)位置是否對齊。若二數(shù)階碼相同,表示小數(shù)點(diǎn)是對齊的,就可以進(jìn)行尾數(shù)的加減運(yùn)算。反之,若二數(shù)階碼不同,表示小數(shù)點(diǎn)位置沒有對齊,此時(shí)必須使二數(shù)階碼相同,這個(gè)過程叫作對階。
要對階,首先應(yīng)求出兩數(shù)階碼Ex和Ey之差,即
△E=Ex-Ey若△E=0,表示兩數(shù)階碼相等,即Ex=Ey;若△E>0,表示Ex>Ey;若△E<0,表示Ex<Ey。當(dāng)Ex≠Ey時(shí),要通過尾數(shù)的移動以改變Ex或Ey,使之相等。原則上,既可以通過Mx移位以改變Ex來達(dá)到Ex=Ey,也可以通過My移位以改變Ey來實(shí)現(xiàn)Ex=Ey。但是,由于浮點(diǎn)表示的數(shù)多是規(guī)格化的,尾數(shù)左移會引起最高有效位的丟失,造成很大誤差。尾數(shù)右移雖引起最低有效位的丟失,但造成誤差較小。
因此,對階操作規(guī)定使尾數(shù)右移,尾數(shù)右移后階碼作相應(yīng)增加,其數(shù)值保持不變。顯然,一個(gè)增加后的階碼與另一個(gè)階碼相等,增加的階碼的一定是小階。因此在對階時(shí),總是使小階向大階看齊,即小階的尾數(shù)向右移位(相當(dāng)于小數(shù)點(diǎn)左移)每右移一位,其階碼加1,直到兩數(shù)的階碼相等為止,右移的位數(shù)等于階差△E。(3)尾數(shù)求和運(yùn)算對階結(jié)束后,即可進(jìn)行尾數(shù)的求和運(yùn)算。不論加法運(yùn)算還是減法運(yùn)算,都按加法進(jìn)行操作,其方法與定點(diǎn)加減法運(yùn)算完全一樣。(4)結(jié)果規(guī)格化在浮點(diǎn)加減運(yùn)算時(shí),尾數(shù)求和的結(jié)果也可以得到01.ф…ф或10.ф…ф,即兩符號位不等,這在定點(diǎn)加減法運(yùn)算中稱為溢出,是不允許的。但在浮點(diǎn)運(yùn)算中,它表明尾數(shù)求和結(jié)果的絕對值大于1,向左破壞了規(guī)格化。此時(shí)將運(yùn)算結(jié)果右移以實(shí)現(xiàn)規(guī)格化表示,稱為向右規(guī)格化。規(guī)則是:尾數(shù)右移1位,階碼加1。當(dāng)尾數(shù)不是1.M時(shí)需向左規(guī)格化。(5)舍入處理在對階或向右規(guī)格化時(shí),尾數(shù)要向右移位,這樣,被右移的尾數(shù)的低位部分會被丟掉,從而造成一定誤差,因此要進(jìn)行舍入處理。簡單的舍入方法有兩種:一種是"0舍1入"法,即如果右移時(shí)被丟掉數(shù)位的最高位為0則舍去,為1則將尾數(shù)的末位加"1"。另一種是"恒置一"法,即只要數(shù)位被移掉,就在尾數(shù)的末尾恒置"1"。在IEEE754標(biāo)準(zhǔn)中,舍入處理提供了四種可選方法:就近舍入其實(shí)質(zhì)就是通常所說的"四舍五入"。例如,尾數(shù)超出規(guī)定的23位的多余位數(shù)字是10010,多余位的值超過規(guī)定的最低有效位值的一半,故最低有效位應(yīng)增1。若多余的5位是01111,則簡單的截尾即可。對多余的5位10000這種特殊情況:若最低有效位現(xiàn)為0,則截尾;若最低有效位現(xiàn)為1,則向上進(jìn)一位使其變?yōu)?。朝0舍入即朝數(shù)軸原點(diǎn)方向舍入,就是簡單的截尾。無論尾數(shù)是正數(shù)還是負(fù)數(shù),截尾都使取值的絕對值比原值的絕對值小。這種方法容易導(dǎo)致誤差積累。朝+∞舍入對正數(shù)來說,只要多余位不全為0則向最低有效位進(jìn)1;對負(fù)數(shù)來說則是簡單的截尾。朝-∞舍入處理方法正好與朝+∞舍入情況相反。對正數(shù)來說,只要多余位不全為0則簡單截尾;對負(fù)數(shù)來說,向最低有效位進(jìn)1。(6)浮點(diǎn)數(shù)的溢出下圖表示了浮點(diǎn)機(jī)器數(shù)在數(shù)軸上的分布情況。當(dāng)機(jī)器浮點(diǎn)數(shù)值大于最大正數(shù)A值,或小于最小負(fù)數(shù)B值時(shí),稱為上溢,這兩種情況意味著階碼運(yùn)算值超出了它所表示的范圍,機(jī)器必須做中斷處理。當(dāng)機(jī)器浮點(diǎn)數(shù)值小于最小正數(shù)a值,或大于最大負(fù)數(shù)b值時(shí),稱為下溢。下溢不是一個(gè)嚴(yán)重問題,通??醋鳛闄C(jī)器零。
浮點(diǎn)數(shù)的溢出是以其階碼溢出表現(xiàn)出來的。在加\減運(yùn)算過程中要檢查是否產(chǎn)生了溢出:若階碼正常,加(減)運(yùn)算正常結(jié)束;若階碼溢出,則要進(jìn)行相應(yīng)處理。另外對尾數(shù)的溢出也需要處理。階碼上溢超過了階碼可能表示的最大值的正指數(shù)值,一般將其認(rèn)為是+∞和-∞。
階碼下溢超過了階碼可能表示的最小值的負(fù)指數(shù)值,一般將其認(rèn)為是0。
尾數(shù)上溢
兩個(gè)同符號尾數(shù)相加產(chǎn)生了最高位向上的進(jìn)位,將尾數(shù)右移,階碼增1來重新對齊。
尾數(shù)下溢在將尾數(shù)右移時(shí),尾數(shù)的最低有效位從尾數(shù)域右端流出,要進(jìn)行舍入處理。[例25]設(shè)x=2010×0.11011011,y=2100×(-0.10101100),求x+y。解:
為了便于直觀理解,假設(shè)兩數(shù)均以補(bǔ)碼表示,階碼采用雙符號位,尾數(shù)采用單符號位,則它們的浮點(diǎn)表示分別為[x]?。?0010,0.11011011
[y]?。?0100,1.01010100<1>求階差并對階△E=Ex-Ey=[Ex]補(bǔ)+[-Ey]補(bǔ)=00010+11100=11110
即△E為-2,x的階碼小,應(yīng)使Mx右移兩位,Ex加2,
[x]浮=00100,0.00110110(11)
其中(11)表示Mx右移2位后移出的最低兩位數(shù)。<3>規(guī)格化處理尾數(shù)運(yùn)算結(jié)果的符號位與最高數(shù)值位同值,應(yīng)執(zhí)行左規(guī)處理,結(jié)果為1.00010101(10),階碼為00011。<4>舍入處理采用0舍1入法處理,則有<5>判溢出
階碼符號位為00,不溢出,故得最終結(jié)果為
x+y=2011×(-0.11101010)<2>尾數(shù)求和3.5.2浮點(diǎn)乘法、除法運(yùn)算1.浮點(diǎn)乘法、除法運(yùn)算規(guī)則設(shè)有兩個(gè)浮點(diǎn)數(shù)x和y:
x=2Ex·Mxy=2Ey·My浮點(diǎn)乘法運(yùn)算的規(guī)則是
x×y=2(Ex+Ey)·(Mx×My)
即乘積的尾數(shù)是相乘兩數(shù)的尾數(shù)之積,乘積的階碼是相乘兩數(shù)的階碼之和。當(dāng)然,這里也有規(guī)格化與舍入等步驟。浮點(diǎn)除法運(yùn)算的規(guī)則是x÷y=2(Ex-Ey)·(Mx÷My)商的尾數(shù)是相除兩數(shù)的尾數(shù)之商,商的階碼是相除兩數(shù)的階碼之差。也有規(guī)格化和舍入等步驟。2.浮點(diǎn)乘、除法運(yùn)算步驟浮點(diǎn)數(shù)的乘除運(yùn)算大體分為四步:第一步,0操作數(shù)檢查;第二步,階碼加/減操作;第三步,尾數(shù)乘/除操作;第四步,結(jié)果規(guī)格化及舍入處理。(1)浮點(diǎn)數(shù)的階碼運(yùn)算對階碼的運(yùn)算有+1、-1、兩階碼求和、兩階碼求差四種,運(yùn)算時(shí)還必須檢查結(jié)果是否溢出。在計(jì)算機(jī)中,階碼通常用補(bǔ)碼或移碼形式表示。補(bǔ)碼運(yùn)算規(guī)則和判定溢出的方法,前面已經(jīng)講過。這里只對移碼的運(yùn)算規(guī)則和判定溢出的方法進(jìn)行講解。移碼的定義為
[x]移=2n+x2n>x≥-2n按此定義,則有
[x]移+[y]移=2n+x+2n+y
=2n+(2n+(x+y))
=2n+[x+y]移即直接用移碼實(shí)現(xiàn)求階碼之和時(shí),結(jié)果的最高位多加了個(gè)1,要得到正確的移碼形式結(jié)果,必須對結(jié)果的符號再執(zhí)行一次求反。當(dāng)混合使用移碼和補(bǔ)碼時(shí),考慮到移碼和補(bǔ)碼的關(guān)系:對同一個(gè)數(shù)值,其數(shù)值位完全相同,而符號位正好完全相反。而[y]補(bǔ)的定義為
[y]補(bǔ)=2n+1+ymod2n+1則求階碼和用如下方式完成:
[x]移+[y]補(bǔ)=2n+x+2n+1+y
=2n+1+(2n+(x+y))即[x+y]移=[x]移+[y]補(bǔ)(mod2n+1)同理
[x-y]移=[x]移+[-y]補(bǔ)
上二式表明執(zhí)行階碼加減時(shí),對加數(shù)或減數(shù)y來說,應(yīng)送移碼符號位正常值的反碼。如果階碼運(yùn)算的結(jié)果溢出,上述條件則不成立。此時(shí),使用雙符號位的階碼加法器,并規(guī)定移碼的第二個(gè)符號位,即最高符號位恒用0參加加減運(yùn)算,則溢出條件是結(jié)果的最高符號位為1。此時(shí),當(dāng)?shù)臀环栁粸?時(shí),表明結(jié)果上溢,為1時(shí),表明結(jié)果下溢。當(dāng)最高符號位為0時(shí),表明沒有溢出;低位符號位為1,表明結(jié)果為正;為0時(shí),表明結(jié)果為負(fù)。[例26]x=+011,y=+110,求[x+y]移和[x-y]移,并判斷是否溢出。[解:][x]移=01011,[y]補(bǔ)=00110,[-y]補(bǔ)=11010
[x+y]移=[x]移+[y]補(bǔ)=10001,結(jié)果上溢。
[x-y]移=[x]移+[-y]補(bǔ)=00101,結(jié)果正確,為-3。(2)尾數(shù)處理浮點(diǎn)加減法對結(jié)果的規(guī)格化及舍入處理也適用于浮點(diǎn)乘除法。第一種簡單方法是,無條件地丟掉正常尾數(shù)最低位之后的全部數(shù)值。這種辦法被稱為截?cái)嗵幚?好處是處理簡單,缺點(diǎn)是影響結(jié)果的精度。第二種簡單辦法是,運(yùn)算過程中保留右移中移出的若干高位的值,最后再按某種規(guī)則用這些位上的值修正尾數(shù)。這種處理方法被稱為舍入處理。3.7校驗(yàn)碼元件故障\噪聲干擾等各種因素常常導(dǎo)致計(jì)算機(jī)在處理信息過程中出現(xiàn)錯(cuò)誤。為了防止錯(cuò)誤,可將信號采用專門的邏輯線路進(jìn)行編碼以檢測錯(cuò)誤,甚至校正錯(cuò)誤。通常的方法是,在每個(gè)字上添加一些校驗(yàn)位,用來確定字中出現(xiàn)錯(cuò)誤的位置。1.奇偶校驗(yàn)碼
最簡單且應(yīng)用廣泛的檢錯(cuò)碼是采用一位校驗(yàn)位的奇校驗(yàn)或偶校驗(yàn)。設(shè)x=(x0x1…xn-1)是一個(gè)n位字,則奇校驗(yàn)位C定義為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 托班思維搭建課程設(shè)計(jì)
- 游泳課程設(shè)計(jì)可復(fù)制模板
- 2024年城市綜合體室外汽車停車位租賃及使用規(guī)范協(xié)議書3篇
- 2025年山東淄博市淄川區(qū)文化旅游投資限公司招聘10人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東海洋化工科學(xué)研究院招考工作人員管理單位筆試遴選500模擬題附帶答案詳解
- 球場訓(xùn)練課程設(shè)計(jì)
- 2025年山東棗莊市直事業(yè)單位招聘筆試管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東晟匯交通工程集團(tuán)限公司招聘40人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東日照市嵐山區(qū)所屬事業(yè)單位招聘急需緊缺人才12人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東威海榮成市衛(wèi)生健康局所屬事業(yè)單位招聘100人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 初中動點(diǎn)問題題目
- 職業(yè)技術(shù)學(xué)校農(nóng)產(chǎn)品加工與質(zhì)量檢測專業(yè)調(diào)研報(bào)告
- 合伙人權(quán)益糾紛解決合同
- 理發(fā)店承包方案
- 機(jī)電材料見證取樣復(fù)試
- 二線干部工作總結(jié)
- 蟲害防治年終報(bào)告總結(jié)
- 2024海南省圖書館公開招聘財(cái)政定額補(bǔ)貼人員15人(一)高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 心理統(tǒng)計(jì)學(xué)統(tǒng)計(jì)方法
- 北斗創(chuàng)新設(shè)計(jì)導(dǎo)航-知到答案、智慧樹答案
- 【韓國三星在中國的跨文化管理探析-以上海子公司為例5800字】
評論
0/150
提交評論