《計(jì)算機(jī)組織與系統(tǒng)結(jié)構(gòu)》-第3章計(jì)算機(jī)中的數(shù)值運(yùn)算與運(yùn)算器_第1頁(yè)
《計(jì)算機(jī)組織與系統(tǒng)結(jié)構(gòu)》-第3章計(jì)算機(jī)中的數(shù)值運(yùn)算與運(yùn)算器_第2頁(yè)
《計(jì)算機(jī)組織與系統(tǒng)結(jié)構(gòu)》-第3章計(jì)算機(jī)中的數(shù)值運(yùn)算與運(yùn)算器_第3頁(yè)
《計(jì)算機(jī)組織與系統(tǒng)結(jié)構(gòu)》-第3章計(jì)算機(jī)中的數(shù)值運(yùn)算與運(yùn)算器_第4頁(yè)
《計(jì)算機(jī)組織與系統(tǒng)結(jié)構(gòu)》-第3章計(jì)算機(jī)中的數(shù)值運(yùn)算與運(yùn)算器_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第3章計(jì)算機(jī)中的數(shù)值運(yùn)算與運(yùn)算器

本章學(xué)習(xí)目標(biāo)

本章將介紹數(shù)據(jù)與文字在計(jì)算機(jī)中的表示方法,詳細(xì)講解數(shù)值數(shù)據(jù)

的原碼、補(bǔ)碼和反碼表示法以及它們之間的相互轉(zhuǎn)換,定點(diǎn)表示法、

浮點(diǎn)表示法、定點(diǎn)運(yùn)算法、浮點(diǎn)運(yùn)算方法和運(yùn)算器的組成。通過(guò)本章

的學(xué)習(xí),應(yīng)該重點(diǎn)掌握和理解以下內(nèi)容:

■了解數(shù)據(jù)、文字在計(jì)算機(jī)中的表示方法

-掌握原碼、補(bǔ)碼和反碼的表示方法,以及它們之間的相互轉(zhuǎn)換

■掌握定點(diǎn)表示法和浮點(diǎn)表示法

-掌握定點(diǎn)四則運(yùn)算和浮點(diǎn)四則運(yùn)算

第三章12011-12-31

3.1數(shù)值數(shù)據(jù)的表示

3.1.1無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)

在計(jì)算機(jī)中,數(shù)據(jù)可分為無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)。所謂無(wú)符號(hào)數(shù),是

指正整數(shù),機(jī)器字長(zhǎng)的全部數(shù)位均用來(lái)表示數(shù)值的大小,相當(dāng)于數(shù)的絕

對(duì)值。例如有兩個(gè)二進(jìn)制數(shù)N1和N2。

Nl=01011表示十進(jìn)制數(shù)11

N2=11011表示十進(jìn)制數(shù)27

對(duì)于字長(zhǎng)為n位的無(wú)符號(hào)數(shù)的表示范圍是0?2n-l。

一般計(jì)算機(jī)中都設(shè)有無(wú)符號(hào)數(shù)的運(yùn)算和處理指令,還有一些轉(zhuǎn)移指

令也是專(zhuān)門(mén)針對(duì)無(wú)符號(hào)數(shù)的。

然而,我們?cè)谌粘I钪袝?huì)大量用到帶符號(hào)的數(shù),即正數(shù)和負(fù)數(shù),

我們用“+”、“一”號(hào)加絕對(duì)值來(lái)表示數(shù)值的大小。用這種形式表示的

數(shù)值在計(jì)算機(jī)技術(shù)中稱(chēng)為“真值”。

第三章22011-12-31

但是,機(jī)器是無(wú)法識(shí)別符號(hào)“+”、“一”的,由于“+”、“一”恰

好是兩種截然不同的狀態(tài),如果用“0”表示“+”,用“I”表示“一”,

這樣符號(hào)就被數(shù)字化了,并且規(guī)定將它放在有符號(hào)數(shù)的前面,這樣就組

成了有符號(hào)數(shù)。這種在計(jì)算機(jī)中使用的、包括符號(hào)位在內(nèi)都被數(shù)字化了

的數(shù)稱(chēng)為“機(jī)器數(shù)”或“機(jī)器碼”。機(jī)器數(shù)有三種不同的表示形式:原

碼、補(bǔ)碼和反碼。

對(duì)于帶符號(hào)數(shù)而言,上面例子中的兩個(gè)機(jī)器數(shù)Nl、N2的含義發(fā)生了

變化。

Nl=01011表示十進(jìn)制數(shù)+n

N2=11011根據(jù)編碼的不同分別表示不同的值,如原碼時(shí)表示十進(jìn)

制數(shù)一11

第三章32011-12-31

3.1.2原碼表示法

原碼表示法是一種最簡(jiǎn)單的機(jī)器數(shù)表示法,用最高位表示符號(hào)位,

符號(hào)位為“o”表示該數(shù)為正數(shù),符號(hào)位為“1”表示該數(shù)為負(fù)數(shù),數(shù)值跟

隨其后,并以絕對(duì)值形式給出,這是與真值最接近的一種表示形式。

1.定點(diǎn)小數(shù)的原碼形式

設(shè)定點(diǎn)小數(shù)為±0了其…Xn,它的原碼形式為Xs%X2…Xn,其中Xs表

示符號(hào)位。原碼的定義為:

X0<X<1

[x]原

1-X=1+IXI-1<X<0

式中:X表不真值,[X]原表示原碼。

例如:X=0.0101,[X]原=X=0.0101

X=-0.0101,[X]原=1-X=1-(-0.0101)=1+0.0101=1.0101

第三章42011-12-31

2.定點(diǎn)整數(shù)的原碼形式

設(shè)定點(diǎn)整數(shù)為±%X2…X。,它的原碼形式為Xs,XJ2…X。,其中Xs

表示符號(hào)位。原碼的定義為:

X0<X<2n

2n-X=2n+|X|-2n<X<0

式中:X表示真值,[X]原表示原碼,n為整數(shù)的位數(shù)。

例如:X=0101,[X]原=X=00101

n4

x=—0101,[X]hi,=2-X=2-(-0101)=10000+0101=10101

在原碼表示法中,真值0有兩種不同的表示形式:

[+0]原=0,00...0

[―0]原=1,00...0

第三章52011-12-31

原碼表示法的優(yōu)點(diǎn)是簡(jiǎn)單易懂,機(jī)器數(shù)和真值之間的相互轉(zhuǎn)換非常

容易,用原碼實(shí)現(xiàn)乘、除運(yùn)算的規(guī)則很簡(jiǎn)單。但它的缺點(diǎn)是實(shí)現(xiàn)加、減

運(yùn)算的規(guī)則較復(fù)雜,這是因?yàn)?,?dāng)兩個(gè)數(shù)相加時(shí),如果是同號(hào)則數(shù)值相

加,如果是異號(hào),則兩數(shù)相減。而在進(jìn)行減法運(yùn)算時(shí),還要比較絕對(duì)值

的大小,然后用大數(shù)減小數(shù),最后還要給結(jié)果選擇恰當(dāng)?shù)姆?hào),為了解

決這些矛盾,人們引入了補(bǔ)碼表示法。

3.1.3補(bǔ)碼表示法

補(bǔ)碼表示法的設(shè)想是:使符號(hào)位參加運(yùn)算,從而簡(jiǎn)化了加、減法的

運(yùn)算規(guī)則;使減法運(yùn)算轉(zhuǎn)化為加法運(yùn)算,從而簡(jiǎn)化了機(jī)器的運(yùn)算器電路。

我們先以鐘表對(duì)時(shí)為例說(shuō)明補(bǔ)碼的概念。假設(shè)有一只表的時(shí)間停在8點(diǎn)

鐘,而現(xiàn)在的正確時(shí)間為3點(diǎn)整,要校準(zhǔn)時(shí)間,可以采用兩種方法:

(1)將時(shí)針順時(shí)針?lè)较蛘龘?小時(shí):8+7=15=12+3=3(mod12)

(2)將時(shí)針逆時(shí)針?lè)较虻箵?小時(shí):8-5=3o

第三章62011-12-31

因?yàn)殓姳淼囊恢転?2個(gè)小時(shí),12相當(dāng)于鐘表的進(jìn)位值,在數(shù)學(xué)中

稱(chēng)為“?!?,記作(mod12)o上例中7和一5對(duì)鐘表而言,它們的作用

相同,即加7和減5是等價(jià)的,我們稱(chēng)7是一5對(duì)模12的補(bǔ)碼??梢杂脭?shù)學(xué)

公式表示為:-5=+7(mod12)

從這個(gè)例子可以得到一個(gè)啟示,對(duì)于一個(gè)確定的模來(lái)說(shuō),某數(shù)減去

小于模的另一個(gè)數(shù),總可以用加上模與該數(shù)的絕對(duì)值之差來(lái)代替,即負(fù)

數(shù)用補(bǔ)碼表示,這樣可以將減法運(yùn)算轉(zhuǎn)化為加法運(yùn)算了。這樣,在計(jì)算

機(jī)中實(shí)現(xiàn)起來(lái)就比較方便了。

例如:9-6=9+(-6)=9+(12-6)=9+6=3(mod12)

65-25=65+(-25)=65+(100-25)=65+75=40(mod100)

在定點(diǎn)小數(shù)機(jī)器中的數(shù)最大不超過(guò)1,也就是負(fù)的小數(shù)對(duì)“產(chǎn)的補(bǔ)

碼是等價(jià)的。但實(shí)際上,負(fù)數(shù)的符號(hào)位還有一個(gè)“1”,要把它看成的數(shù)

的一部分,所以要對(duì)2求補(bǔ)碼,即以2為模。

第三章72011-12-31

1.定點(diǎn)小數(shù)的補(bǔ)碼形式

若定點(diǎn)小數(shù)為±0.X]X2…Xn,它的原碼形式為Xs.xp(2…Xn,其中表

示符號(hào)位,則補(bǔ)碼表示的定義為:

X0<X<1

(mod2)

2+X=2—|X|-1<X<0

式中[X]補(bǔ)為機(jī)器數(shù),X為真值。

例如,X=+0.0101,則[X]補(bǔ)=0.0101

x=-o.0101,則[X]補(bǔ)=10+X=10.0000-0.0101=1.1011

一般情況下,對(duì)于正數(shù)X=+0.X]X2…Xn,則有

補(bǔ)=

[X]0X^2,..xn

對(duì)于負(fù)數(shù)X=—0.X/2…Xn,則有

[X]補(bǔ)=10.00???0—O.XiX2???Xn(mod2)

注意,0的補(bǔ)碼表示只有一種形式,即[+0]補(bǔ)二[一0]補(bǔ)=0.0000。

第三章82011-12-31

2.定點(diǎn)整數(shù)的補(bǔ)碼形式

若定點(diǎn)整數(shù)為±XR2…Xn,它的補(bǔ)碼形式為Xs,乂止2…Xn,其中Xs表

示符號(hào)位,則補(bǔ)碼表示的定義為:

X0<X<2n

(mod2/z+1)

2n+1+X=2n+1-|^|-2n<X<0

式中:X表示真值,n為整數(shù)的位數(shù)。

例如,X=+0101,則[X]補(bǔ)=00101

X=-0101,則[X]補(bǔ)=2n+1+X=25+(—0101)=25-0101=100000-

0101=1,1011

采用補(bǔ)碼表示法進(jìn)行減法運(yùn)算就比原碼方便多了,因?yàn)椴徽撌钦龜?shù)

還是負(fù)數(shù),機(jī)器總是做加法,減法運(yùn)算可轉(zhuǎn)換成加法運(yùn)算。但根據(jù)補(bǔ)碼

的定義,求負(fù)數(shù)的補(bǔ)碼要從2減去|X|。為了用加法代替減法,結(jié)果還要

在求補(bǔ)碼時(shí)做一次減法,這顯然是不方便的。下面介紹的反碼表示法可

以解決負(fù)數(shù)的求補(bǔ)問(wèn)題。

第三章92011-12-31

3.1.4反碼表示法

所謂反碼,就是二進(jìn)制數(shù)的各位數(shù)碼由o變?yōu)?,由1變?yōu)?。也就是

說(shuō),若Xj=l,則反碼七二0;若X/0,則反碼Xj=l。數(shù)值上面的橫線表示反

碼的意思。反碼表示法與補(bǔ)碼表示法有相似之處,正數(shù)的反碼就等于真

值,負(fù)數(shù)的反碼是把其原碼除符號(hào)位以外的各位按位取反。

在計(jì)算機(jī)中用觸發(fā)器寄存數(shù)碼,若觸發(fā)器Q端輸出表示原碼,則其端

輸出就是反碼。由此可見(jiàn),反碼是容易得到的。

1.定點(diǎn)小數(shù)的反碼形式

對(duì)定點(diǎn)小數(shù),反碼表示的定義為:

0<x<1

-2-n)+X-1<X<0

其中n代表數(shù)的位數(shù)。

第三章102011-12-31

下面我們來(lái)證明第二個(gè)式子。SX=-0X1X2...Xn,則有[X]反O現(xiàn)在

將X的絕對(duì)值|X|和[X]反相加,則得

[X]反+|X|=1.11...1=10.00...0-0.00...1=2-2-n

所以

[X]反二(2-2-n)-|x|=(2-2一n)+X

一般情況下,對(duì)于正X=+0.X/2…Xn,則有

[X]反二0印2…Xn

對(duì)于負(fù)數(shù)X=-0力也…Xn,則有

1.X1X2…Xn

對(duì)于0,有[+0]反和[—0]反之分:

[+0]反=0.00...0

[―0]反=1.11...1

第三章112011-12-31

例如,X=+0.0101,則如]反=0.0101

X=-0.0101,則[X]反=(2-2-4)+X=1.1111+(一

0.0101)=1.1111-0.0101=1.1010

我們比較反碼與補(bǔ)碼的公式

[X]反=(2-2-n)+X

[X]補(bǔ)=2+X

可以得到

兇補(bǔ)=[X]反+2-n

由這個(gè)公式可知,求一個(gè)負(fù)數(shù)的補(bǔ)碼,其方法是符號(hào)位為1,其余各位0

變1,1變0,然后在最末位(2-n)上加1。

第三章122011-12-31

2.定點(diǎn)整數(shù)的反碼形式

對(duì)定點(diǎn)整數(shù),反碼表示的定義是

0<X<2n

-1)+X-2n<X<0

例如,X=+0101,則[X]反=00101

X=-0101,貝MX]反二(2n+1-l)+X=(25-1)+(-0101)

=(100000-1)-0101

=11111-0101

=11010

第三章132011-12-31

3.1.5三種碼制的比較與轉(zhuǎn)換

1.比較

三種碼制既有共同點(diǎn),又有各自不同的性質(zhì),主要區(qū)別有以下幾點(diǎn):

(1)對(duì)于正數(shù),它們都等于真值本身,而對(duì)于負(fù)數(shù)各自有不同的表示。

(2)最高位都表示符號(hào)位,補(bǔ)碼和反碼的符號(hào)位可作為數(shù)值的一部分看

待,和數(shù)值位一起參加運(yùn)算;但原碼的符號(hào)位不允許和數(shù)值位同等看待,

必須分開(kāi)處理。

(3)對(duì)于真值0,原碼和反碼各有兩種不同的表示形式,而補(bǔ)碼只有唯

一的一種表示形式。

(4)原碼、反碼表示的正、負(fù)數(shù)范圍相對(duì)零來(lái)說(shuō)是對(duì)稱(chēng)的;但補(bǔ)碼負(fù)數(shù)

表示范圍較正數(shù)表示范圍大,能多表示一個(gè)絕對(duì)值最大的數(shù),其值等于一

2-n(定點(diǎn)整數(shù))或一1(定點(diǎn)小數(shù))。

第三章142011-12-31

表3-1給出了以4位二進(jìn)制數(shù)為例,表示三種不同碼制時(shí)的十進(jìn)制真值。

表3-1三種不同碼制時(shí)的十進(jìn)制真值

二進(jìn)制數(shù)原碼補(bǔ)碼反碼

0000000

0001111

0010222

0011333

0100444

0101555

0110666

0111777

1000~0-8-7

1001一]一7

1010一6^5

1011-3~4

1100-4-3

1101______-3-2

1110-6-2--1

1111-7-1-0

第三章152011-12-31

2.轉(zhuǎn)換

三種不同碼制以及真值之間的轉(zhuǎn)換關(guān)系如圖3-1所示。

從圖3-1可看出,真值X與補(bǔ)碼或反碼之間的轉(zhuǎn)換通常是通過(guò)原碼實(shí)

現(xiàn)的,也可以直接完成真值與補(bǔ)碼或反碼之間的轉(zhuǎn)化。

若已知機(jī)器的字長(zhǎng),則機(jī)器數(shù)的位數(shù)應(yīng)補(bǔ)夠相應(yīng)的位數(shù),例如機(jī)器

字長(zhǎng)為8位則:

X=1011[X]原=00001011[X]補(bǔ)=00001011[X]反=00001011

X=-1011[X]B=10001011[x]補(bǔ)二iinoioi[X]^=11110100

X=0.1011[X].原g=0.1011000[X],k=0.1011000[X]^=0.1011000

x=-o.1011[X]原=1.10110000101000[X]反二1.0100111

第三章162011-12-31

[X]補(bǔ)

符號(hào)位不變

當(dāng)Xs=o時(shí)數(shù)值位不變

當(dāng)Xs=l日寸數(shù)值位變反+1

符號(hào)+/-變成0/1

[X]真值

數(shù)值位不變

符號(hào)位不變

當(dāng)Xs=0口寸數(shù)值位不變

當(dāng)Xs=l時(shí)數(shù)值位變反

[X]反

圖3-1三種不同碼制以及真值之間的轉(zhuǎn)換關(guān)系

第三章172011-12-31

3.2數(shù)的定點(diǎn)表示與浮點(diǎn)表示

在計(jì)算機(jī)中,小數(shù)點(diǎn)不用專(zhuān)門(mén)的器件表示,而是按約定的方式標(biāo)出。

根據(jù)小數(shù)點(diǎn)的位置是否固定,在計(jì)算機(jī)中有兩種數(shù)據(jù)格式:定點(diǎn)表示和

'4學(xué)點(diǎn)表示o

3.2.1定點(diǎn)表示法

定點(diǎn)數(shù)是指小數(shù)點(diǎn)固定在某個(gè)位置上的數(shù)值。通常有小數(shù)和整數(shù)兩

種表示形式。

1.定點(diǎn)小數(shù)

小數(shù)點(diǎn)的位置固定在最高有效數(shù)位之前、符號(hào)位之后時(shí),機(jī)器內(nèi)的

數(shù)稱(chēng)為純小數(shù)。記作Xs.X】X2…X。,其中表示符號(hào)位,這個(gè)數(shù)是一個(gè)純

小數(shù),如圖3-2所示。定點(diǎn)小數(shù)的小數(shù)點(diǎn)位置是隱含約定的,小數(shù)點(diǎn)并不

需要真正占據(jù)一個(gè)二進(jìn)制位。

第三章182011-12-31

當(dāng)Xs=O、X.l、Xz=l、…、x『l時(shí),X為最大正數(shù),即X最大正數(shù)=(l-2n)

當(dāng)X§=0、X]=0、…、Xn_j=0>X01時(shí),X為最小正數(shù),即X最小正數(shù)=2華

當(dāng)Xs=l時(shí),表示X為負(fù)數(shù),此時(shí)情況比較復(fù)雜,因?yàn)樵谟?jì)算機(jī)中帶符號(hào)

的數(shù)可以用補(bǔ)碼表示,也可以用原碼表示。如前所述,原碼與補(bǔ)碼所表示

的絕對(duì)值最大的負(fù)數(shù)是不同的,所以原碼和補(bǔ)碼的表示范圍有一些差別。

設(shè)機(jī)器字長(zhǎng)有n位,貝I」:

原碼定點(diǎn)小數(shù)表示位的范圍為:一(1—2-n)?(1—2-n)。

補(bǔ)碼定點(diǎn)小數(shù)表示位的范圍為:一1?(1—2-n)o

圖3-2定點(diǎn)小數(shù)格式

第三章192011-12-31

2.定點(diǎn)整數(shù)

小數(shù)點(diǎn)的位置隱含固定在最低有效數(shù)位之后時(shí),機(jī)器內(nèi)的數(shù)稱(chēng)為純

整數(shù)。記作XsX]X2…Xn,這是一個(gè)純整數(shù),如圖3-3所示。

圖3-3定點(diǎn)整數(shù)格式

n

原碼定點(diǎn)整數(shù)表示位的范圍為:一(2n—1)?(2—1)O

11n

補(bǔ)碼定點(diǎn)整數(shù)表示位的范圍為:-2?(2—1)o

X最小正數(shù)二1

第三章202011-12-31

在定點(diǎn)表示法中,參加運(yùn)算的數(shù)以及運(yùn)算的結(jié)果都必須保證在該

定點(diǎn)數(shù)所能表示的數(shù)值范圍內(nèi)。如遇到絕對(duì)值小于最小正數(shù)的數(shù),被

當(dāng)作機(jī)器0處理,稱(chēng)為“下溢”;而大于最大正數(shù)和小于絕對(duì)值最大的

負(fù)數(shù)的數(shù),統(tǒng)稱(chēng)為“溢出”。這時(shí)計(jì)算機(jī)將暫時(shí)中斷運(yùn)算操作,去進(jìn)

行溢出處理。

只能處理定點(diǎn)數(shù)的計(jì)算機(jī)稱(chēng)為定點(diǎn)計(jì)算機(jī)。由于小數(shù)點(diǎn)的位置固

定不變,因此當(dāng)機(jī)器處理的數(shù)不是純小數(shù)或純整數(shù)時(shí),必須設(shè)定一個(gè)

比例因子,把原始的數(shù)縮小成定點(diǎn)小數(shù)或擴(kuò)大成定點(diǎn)整數(shù)后再進(jìn)行處

理,所得到的運(yùn)算結(jié)果還必須根據(jù)比例因子還原成實(shí)際的數(shù)值。選擇

合適的比例因子非常重要,必須保證參加運(yùn)算的初始數(shù)據(jù)、中間結(jié)果

和最后結(jié)果都在定點(diǎn)數(shù)的表示范圍之內(nèi),否則將會(huì)產(chǎn)生“溢出”。

第三章212011-12-31

322浮點(diǎn)表示法

i.浮點(diǎn)數(shù)的表示形式

使用定點(diǎn)表示法能表示以o為中心的一定范圍的正、負(fù)的整數(shù)或小數(shù)。

實(shí)際上計(jì)算機(jī)中處理的數(shù)不一定是純小數(shù)或純整數(shù),而且有些數(shù)據(jù)的數(shù)

值范圍相差很大,它們都不能直接用定點(diǎn)數(shù)表示,但均可用浮點(diǎn)數(shù)表示。

浮點(diǎn)數(shù)即小數(shù)點(diǎn)的位置可以浮動(dòng)的數(shù),如

325.78=3.2578X102=3257.8XIO-1=0.32578X103

顯然,這里小數(shù)點(diǎn)的位置是變化的,但因?yàn)榉謩e乘上了不同的10的

方幕,因此值不變。通常浮點(diǎn)數(shù)可表示成

N=MXrE

式中M為尾數(shù)(可正可負(fù)),E為階碼(可正可負(fù)),r是基數(shù)(或基

值)。在大多數(shù)計(jì)算機(jī)中,尾數(shù)為純小數(shù),常用原碼或補(bǔ)碼表示;階碼

為定點(diǎn)整數(shù),常用補(bǔ)碼表示;基數(shù)可取2、4、6、8、16等,通常廠2。

第三章222011-12-31

浮點(diǎn)數(shù)在機(jī)器中的形式如圖3-4所示。采用這種數(shù)據(jù)格式的機(jī)器稱(chēng)

為浮點(diǎn)機(jī)。浮點(diǎn)數(shù)的基數(shù)是隱含的,在整個(gè)機(jī)器數(shù)中不出現(xiàn)。階碼的符

號(hào)位為es,階碼的大小反映了在數(shù)N中小數(shù)點(diǎn)的實(shí)際位置;尾數(shù)的符號(hào)位

為叫,它也是整個(gè)浮點(diǎn)數(shù)的符號(hào)位,表示了該浮點(diǎn)數(shù)的正、負(fù)。

可見(jiàn),浮點(diǎn)數(shù)有階碼和尾數(shù)兩部分組成。浮點(diǎn)數(shù)的表示范圍主要由

階碼決定,有效數(shù)字的精度主要由尾數(shù)就決定。

1位<k位>1位<n位

m

0

階碼E尾數(shù)M

圖3?4浮點(diǎn)數(shù)的一般格式

第三章232011-12-31

2.浮點(diǎn)數(shù)的表示范圍

設(shè)某浮點(diǎn)數(shù)的格式如圖3-4所示,k和n分別表示階碼和尾數(shù)的位數(shù)

(不包括符號(hào)位),尾數(shù)和階碼均用補(bǔ)碼表示。

當(dāng)es=O,ms=0,階碼和尾數(shù)的數(shù)值位各位都為1(即階碼和尾數(shù)都為

最大正數(shù))時(shí),該浮點(diǎn)數(shù)為最大正數(shù):

X最大正數(shù)=(1-2?2

當(dāng)e§=l,ms=0,尾數(shù)的最低位irin=l,其余各位為0(即階碼為絕對(duì)

值最大的負(fù)數(shù),尾數(shù)為最小正數(shù))時(shí),該浮點(diǎn)數(shù)為最小正數(shù):

ck

X最小正數(shù)=2、2-2

當(dāng)es=0,階碼的數(shù)值位全為1;ms=l,尾數(shù)的數(shù)值位全為0(即階碼

為絕對(duì)值最大的正數(shù),尾數(shù)為絕對(duì)值最大的負(fù)數(shù))時(shí),該浮點(diǎn)數(shù)為絕對(duì)

值最大負(fù)數(shù):

V—_]*?2T

八絕對(duì)值最大的負(fù)數(shù)一n

第三章242011-12-31

3.浮點(diǎn)數(shù)的規(guī)格化

為了提高浮點(diǎn)數(shù)的精度,必須充分利用尾數(shù)的有效位數(shù),通常采取

浮點(diǎn)數(shù)規(guī)格化形式,即規(guī)定尾數(shù)的最高位數(shù)必須是一個(gè)有效數(shù)值。如果

不是規(guī)格化數(shù),就要通過(guò)修改階碼并同時(shí)左右移尾數(shù)的方法,使其變成

規(guī)格化數(shù)。將非規(guī)格化數(shù)轉(zhuǎn)換成規(guī)格化數(shù)的過(guò)程叫做規(guī)格化。對(duì)于基數(shù)

不同的浮點(diǎn)數(shù),因其規(guī)格化數(shù)的形式不同規(guī)格化過(guò)程也不同。

一個(gè)浮點(diǎn)數(shù)的表示形式不是唯一的。例如二進(jìn)制數(shù)0.0001011可表

示為0.001011X2T、0.01011X2-2>0.1011X2—3…,而其中只有

0.10HX2-3是規(guī)格化數(shù)。

在尾數(shù)用原碼表示時(shí),規(guī)格化浮點(diǎn)數(shù)的尾數(shù)的最高數(shù)位總等于1。

第三章252011-12-31

3.2.3浮點(diǎn)數(shù)階碼的移碼表示法

浮點(diǎn)數(shù)的階碼是帶符號(hào)的定點(diǎn)整數(shù),因此它可以用前面介紹的任何

一種機(jī)器數(shù)的表示方法來(lái)表示。但在大多數(shù)計(jì)算機(jī)中,多采用補(bǔ)碼表示

法或另外一種編碼方法——移碼表示法。

設(shè)定點(diǎn)整數(shù)的移碼形式為X0X]X2…Xn,字長(zhǎng)為n+1位,則移碼的定義為

[X]移=2n+X-2n<X<2n

式中:[X]移表示移碼,X為真值。

根據(jù)定義可知,移碼就是真值X加一個(gè)常數(shù)2%相當(dāng)于X在數(shù)軸上向

正方向平移了2n個(gè)單位,由此而得“移碼”之稱(chēng)。移碼也可稱(chēng)為增碼或

偏碼,常數(shù)2n稱(chēng)為偏置量或偏置值。

將移碼的定義和補(bǔ)碼的定義相比較,可以找出移碼和補(bǔ)碼之間的關(guān)系:

X0<X<2n

因?yàn)?/p>

2n+,+X=2n+,-IXI-2"<X<0

第三章262011-12-31

表3-2給出了移碼、補(bǔ)碼和真值之間的關(guān)系。

表3?2移碼、補(bǔ)碼和真值之間的關(guān)系

真值X(十進(jìn)制)真值X(二進(jìn)制)[X]補(bǔ)[X]移

-128-100000001000000000000000

-127-11111111000000100000001

????????????

-1-00000011111111101111111

000000000000000010000000

100000010000000110000001

????????????

12711111110111111111111111

第三章272011-12-31

從表3-2中,可看出移碼具有以下特點(diǎn):

(1)在移碼中,最高位為“0”表示負(fù)數(shù),最高位為“1”表示正數(shù),這

與原碼、補(bǔ)碼、反碼的符號(hào)位取值相反;

(2)移碼全為0時(shí),它所對(duì)應(yīng)的真值最??;全為1時(shí)所對(duì)應(yīng)的真值最大。

因此移碼的大小直觀地反映了真值得大小,有助于兩個(gè)浮點(diǎn)數(shù)進(jìn)行階碼

的大小比較;

(3)真值0在移碼中的表示形式也是唯一的,即[+0]補(bǔ)二[-0]補(bǔ)

=100...0;

(4)移碼把真值映射到一個(gè)正數(shù)域,所以可將移碼視為無(wú)符號(hào)數(shù),直

接按無(wú)符號(hào)數(shù)規(guī)則比較大?。?/p>

(5)同一數(shù)值的移碼和補(bǔ)碼除最高位相反外,其他各位相同。

(6)移碼的偏置量并不唯一,根據(jù)所要表示的移碼值范圍來(lái)選擇不同

的偏置量,需要注意的是IEEE754的標(biāo)準(zhǔn)中8位二進(jìn)制的偏移量的取值為

127。

第三章282011-12-31

3.2.4實(shí)用浮點(diǎn)數(shù)舉例

在現(xiàn)代計(jì)算機(jī)中,浮點(diǎn)數(shù)一般采用國(guó)際標(biāo)準(zhǔn)IEEE754,這種標(biāo)準(zhǔn)的

形式如圖3-5所不。

ms階碼(含階符)尾數(shù)

數(shù)符小數(shù)點(diǎn)位置

圖3-5IEEE754標(biāo)準(zhǔn)的浮點(diǎn)數(shù)形式

第三章292011-12-31

按照IEEE754標(biāo)準(zhǔn),常用的浮點(diǎn)數(shù)有三種,它們具體的格式見(jiàn)表3-3。

表3?3IEEE754標(biāo)準(zhǔn)中的三種浮點(diǎn)數(shù)

類(lèi)型數(shù)符階碼尾數(shù)總位數(shù)偏置值

r^3

短浮點(diǎn)數(shù)18327FH

長(zhǎng)浮點(diǎn)數(shù)11152643FFH

臨時(shí)浮點(diǎn)數(shù)11564r^o3FFFH

下面以32位的短浮點(diǎn)數(shù)為例,討論浮點(diǎn)代碼與真值之間的關(guān)系。最高

位為數(shù)符位;其后是8位階碼,以2為底,階碼的偏置值為127;其余23位

是尾數(shù)。為了使尾數(shù)部分能表示多一位的有效值,IEEE754標(biāo)準(zhǔn)采用隱含

尾數(shù)最高數(shù)位1的方法(即這一位1不表示出來(lái)),因此尾數(shù)實(shí)際上是24位。

需要注意的是,隱含的1是一位整數(shù)(即位權(quán)為2。)。在浮點(diǎn)格式中表示

出來(lái)的23位尾數(shù)是純小數(shù),并用原碼表示。

第三章302011-12-31

例3-3:將(56.25)I。轉(zhuǎn)換成短浮點(diǎn)數(shù)。

解:(1)把十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)

(56.25)10二(111000.01)2

(2)規(guī)格化二進(jìn)制數(shù)

111000.01=1.1100001X25

(3)算出移碼(階碼真值+偏置值)

101+01111111-10000100

(4)短浮點(diǎn)數(shù)格式存儲(chǔ)該數(shù)

因?yàn)?/p>

符號(hào)位二0

階碼二10000100

尾數(shù)二11000010000000000000000

所以短浮點(diǎn)數(shù)代碼為:0;10000100;11000010000000000000000

表示為十六進(jìn)制的代碼為:42610000Ho

第三章312011-12-31

例3-4:把短浮點(diǎn)數(shù)C1C90000H轉(zhuǎn)換成十進(jìn)制數(shù)。

(1)把十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),并分離出符號(hào)位、階碼和尾數(shù)

因?yàn)镃1C90000H二11000001110010010000000000000000

所以,符號(hào)位二1

階碼二10000011

尾數(shù)二10010010000000000000000

(2)計(jì)算出階碼真值(移碼一偏置值)

10000011-01111111=100

(3)以規(guī)格化二進(jìn)制數(shù)形式寫(xiě)出此數(shù)

1.1001001X24

(4)寫(xiě)成非規(guī)格化二進(jìn)制數(shù)形式

11001.001

(5)轉(zhuǎn)換成十進(jìn)制數(shù),并加上符號(hào)位

(11001.001)2二(25.125)10

所以,該浮點(diǎn)數(shù)為-25.125

第三章322011-12-31

3.3數(shù)值運(yùn)算

3.3.1定點(diǎn)四則運(yùn)算

定點(diǎn)四則運(yùn)算包括加、減、乘、除運(yùn)算。

1.補(bǔ)碼加法運(yùn)算

上一節(jié)我們介紹了數(shù)的補(bǔ)碼表示法,負(fù)數(shù)用補(bǔ)碼表示后,就可以和

正數(shù)一樣來(lái)處理。這樣,運(yùn)算器里只需要一個(gè)加法器就可以了,不必為

了負(fù)數(shù)的加法運(yùn)算,再配一個(gè)加法器。

補(bǔ)碼加法的公式是:

[X]補(bǔ)+[Y]補(bǔ)=[X+Y]補(bǔ)(mod2)

上述公式表明,在模2意義下,任意兩個(gè)數(shù)的補(bǔ)碼之和等于該兩個(gè)

數(shù)之和的補(bǔ)碼。這是補(bǔ)碼加法的理論基礎(chǔ),其結(jié)論也適用定點(diǎn)整數(shù)。

補(bǔ)碼加法有以下特點(diǎn):一是符號(hào)位要作為數(shù)的一部分一起參加運(yùn)算;

二是要在模2的意義下相加,即超過(guò)2的進(jìn)位要舍去。

第三章332011-12-31

2.補(bǔ)碼減法運(yùn)算

負(fù)數(shù)的加法要利用補(bǔ)碼化為加法來(lái)做,減法運(yùn)算當(dāng)然也要設(shè)法化為

加法來(lái)做。之所以使用這種方法而不直接使用減法,是因?yàn)樗梢院统?/p>

規(guī)的加法運(yùn)算使用同一個(gè)加法器電路,從而簡(jiǎn)化了計(jì)算機(jī)的設(shè)計(jì)。

補(bǔ)碼減法運(yùn)算的公式為:

[X—Y]補(bǔ)=[X]補(bǔ)一[Y]補(bǔ)=[X]補(bǔ)+[—Y]補(bǔ)(mod2)

因此,若機(jī)器數(shù)采用補(bǔ)碼,當(dāng)求X—Y時(shí),只需先求LY]補(bǔ)(稱(chēng)[—

Y]補(bǔ)為“變補(bǔ)”后的減數(shù)),就可以按照補(bǔ)碼加法規(guī)則進(jìn)行運(yùn)算。而[—

Y]補(bǔ)由[Y]補(bǔ)連同符號(hào)位在內(nèi),每位取反,末位加1而得。

第三章342011-12-31

3.溢出判斷

在定點(diǎn)小數(shù)機(jī)器中,數(shù)的表示范圍為|X|VI。在運(yùn)算過(guò)程中如出現(xiàn)

大于1的現(xiàn)象,稱(chēng)為“溢出”。在定點(diǎn)中,正常情況下溢出是不允許的。

兩個(gè)正數(shù)相加,結(jié)果大于機(jī)器所能表示的最大正數(shù),成為正溢。而

兩個(gè)負(fù)數(shù)相加,結(jié)果小于機(jī)器所能表示的最小負(fù)數(shù),成為負(fù)溢。如圖3-

6所示,對(duì)定點(diǎn)正數(shù)而言,也同樣存在正溢、負(fù)溢問(wèn)題。

負(fù)溢<一可表示的數(shù)一》正溢

-10+1

圖3-6定點(diǎn)小數(shù)的溢出

第三章352011-12-31

為了保證計(jì)算的正確性,我們必須要對(duì)溢出進(jìn)行檢測(cè)。判斷“溢出”

是否發(fā)生,可采用兩種檢測(cè)方法。第一種方法是采用雙符號(hào)位法,這稱(chēng)

為“變形補(bǔ)碼”或“模4補(bǔ)碼”,從而使模2補(bǔ)碼所能表示的數(shù)的范圍擴(kuò)

大了一倍。采用變形補(bǔ)碼后,任何小于1的正數(shù),兩位符號(hào)位都是“0”;

任何大于一的1負(fù)數(shù),兩個(gè)符號(hào)位都是“1”,兩個(gè)數(shù)相加后,其結(jié)果的

符號(hào)出現(xiàn)“01”或“10”兩個(gè)組合時(shí),表示發(fā)生溢出。這是因?yàn)閮蓚€(gè)絕對(duì)

值小于1的數(shù)相加,其結(jié)果不會(huì)大于或等于2,而最高符號(hào)位永遠(yuǎn)表示結(jié)

果的正確符號(hào)。

第三章362011-12-31

我們可以得出如下結(jié)論:

(1)當(dāng)以模4補(bǔ)碼運(yùn)算,運(yùn)算結(jié)果的兩個(gè)符號(hào)位相異時(shí),表示溢出;

相同時(shí),表示未溢出。所以溢出邏輯表達(dá)式為V二SfRf2,其中$門(mén)和S’2分

別表示為最高符號(hào)位和第二符號(hào)位。此邏輯表達(dá)式可用異或門(mén)實(shí)現(xiàn)。

(2)模4補(bǔ)碼相加的結(jié)果,不論是否溢出,最高符號(hào)位始終表示正確

的符號(hào)。

(3)第二種溢出檢測(cè)的方法是采用單符號(hào)位法。從例9和例10中可看

出,當(dāng)最高有效位產(chǎn)生進(jìn)位而符號(hào)位無(wú)進(jìn)位時(shí),產(chǎn)生正溢;當(dāng)最高有效

位無(wú)進(jìn)位而符號(hào)位有進(jìn)位時(shí),產(chǎn)生負(fù)溢。所以溢出邏輯表示式為V=CfC0,

其中Cf表示符號(hào)位產(chǎn)生的進(jìn)位,C。表示最高有效位產(chǎn)生的進(jìn)位。此邏輯

表達(dá)式也可用異或門(mén)實(shí)現(xiàn)。

在定點(diǎn)機(jī)中,當(dāng)運(yùn)算結(jié)果發(fā)生溢出時(shí),機(jī)器通過(guò)邏輯電路自動(dòng)檢測(cè)

出這種益處,并進(jìn)行中斷處理。

第三章372011-12-31

4.乘法運(yùn)算

與加法和減法相比,無(wú)論是用硬件還是用軟件來(lái)完成。乘法都是一

個(gè)復(fù)雜的操作。各種各樣的算法已用于各類(lèi)計(jì)算機(jī)中。我們先介紹兩個(gè)

無(wú)符號(hào)整數(shù)相乘的過(guò)程,然后再介紹實(shí)現(xiàn)兩個(gè)補(bǔ)碼表示數(shù)的乘法的最普

遍的技術(shù)。

(1)無(wú)符號(hào)整數(shù)乘法

由圖3?7所示的手工乘法過(guò)程,可得到如下幾點(diǎn)重要結(jié)論:

1011被乘數(shù)11

X1101乘數(shù)13

1011

0000

1011

1011

10001111

圖3-7無(wú)符號(hào)二進(jìn)制乘法

第三章382011-12-31

1)乘法涉及到部分積的生成,乘數(shù)的每一位對(duì)應(yīng)一個(gè)部分積。然后,

部分積相加得到最后的乘積。

2)部分積是容易確定的。當(dāng)乘數(shù)的位是0時(shí),其部分積也是0;當(dāng)乘

數(shù)的位是1時(shí),其部分積是被乘數(shù)。

3)部分積通過(guò)求和而得到最后乘積。為此,后面的部分積總要比它

前面的部分積左移一個(gè)位置。

4)兩個(gè)n位二進(jìn)制整數(shù)的乘法導(dǎo)致其積的長(zhǎng)度為2n位。

與手工演算相比,計(jì)算機(jī)能做幾件事使操作更有效。首先,可以邊產(chǎn)

生部分積邊做加法,而不是等到最后再相加。這就取消了存儲(chǔ)所有部分

積的需求;只需要少數(shù)幾個(gè)寄存器。其次,我們能節(jié)省某些部分積的生

成時(shí)間,對(duì)于乘數(shù)的每個(gè)1,需要加和移位兩個(gè)操作;但對(duì)于每個(gè)0,則

只需移位操作。

第三章392011-12-31

圖3-8表示了一種采用此方式的實(shí)現(xiàn)方案。

乘數(shù)和被乘數(shù)分別裝入兩個(gè)寄存器(Q和M)。還需要第三個(gè)寄存

器A,初始設(shè)置為0。還需要一個(gè)1位寄存器C,初始值為0,用于保存加

法可能產(chǎn)生的進(jìn)位。

被乘數(shù)

乘數(shù)

圖3-8無(wú)符號(hào)二進(jìn)制乘法實(shí)現(xiàn)硬件

第三章402011-12-31

乘法器的操作如下???/p>

制邏輯每次讀乘數(shù)的一位。

若Qo是1,則被乘數(shù)與A寄存

器相加并將結(jié)果存于A寄存

器。然后,C、A和Q各寄存

器的所有位向右移一位,于

是C位進(jìn)入A。/,進(jìn)入Qz,

而Qo丟失。若Qo是0,則只

需進(jìn)位,無(wú)需完成加法。對(duì)

原始的乘數(shù)每一位重復(fù)上述

過(guò)程。產(chǎn)生的2n位積存于A

和Q寄存器。這種操作的流積在A,Q中

程圖如圖3-9所示。

圖3-9無(wú)符號(hào)二進(jìn)制乘法流程圖

第三章412011-12-31

(2)補(bǔ)碼乘法

在計(jì)算機(jī)中帶符號(hào)數(shù)一般都用補(bǔ)碼表示,補(bǔ)碼的加減法非常簡(jiǎn)單,

在以加減運(yùn)算為主的通用機(jī)中,操作數(shù)都用補(bǔ)碼表示,所以這類(lèi)計(jì)算機(jī)

在做乘法時(shí)也使用補(bǔ)碼。

最常用的補(bǔ)碼乘法算法是Booth算法,又稱(chēng)比較法。

設(shè)被乘數(shù)[X]補(bǔ)=Xs.XRz…X/乘數(shù)[Y]補(bǔ)=Ys.YM…Yn。在乘數(shù)的最低位

置后增加一位附加位Ya,它初值為3增加附加位不會(huì)影響運(yùn)算結(jié)果。

每次運(yùn)算取決于乘數(shù)相鄰兩位Yj+1的值,把它們稱(chēng)為乘法的判斷

位。這種運(yùn)算是根據(jù)乘數(shù)相鄰兩位的比較結(jié)果(Yi+1—Yj)來(lái)確定運(yùn)算操

作,因此稱(chēng)為比較法。

第三章422011-12-31

Booth算法規(guī)則如下:

1)參加運(yùn)算的數(shù)用補(bǔ)碼表示;

2)符號(hào)位參加運(yùn)算;

3)由于每求一次部分積要右移一位,所以乘數(shù)的最低兩位Yn、Yn+1的

值決定了每次執(zhí)行的操作,如表3-4所示;

4)移位按補(bǔ)碼右移規(guī)則進(jìn)行,右移前:XX]X2…X,右移后:XX

X]???Xn_2Xn_p

5)共需要進(jìn)行n+1次累加,n次移位。

表3-4Booth乘法運(yùn)算操作

判斷位丫口、Y/]I

0~0原部分積右移一位

。1原部分積加[X]補(bǔ)后右移一位

10原部分積加[—x]補(bǔ)后右移一位

11原部分積右移一位

第三章432011-12-31

圖3-10給出了Booth算法的框圖。被乘數(shù)和乘數(shù)分別放入B和C寄存

器內(nèi)。乘法的結(jié)果將出現(xiàn)在A和C寄存器中。A和附加位CM初始化為0。

運(yùn)算過(guò)程中,控制邏輯每次掃描C寄存器中的最低兩位CnG+i。若兩位

相同(11或00),則A、C寄存器的所有位向右移一位。若兩位不同,當(dāng)

時(shí),則A寄存器的內(nèi)容加B寄存器的內(nèi)容(即被乘數(shù));當(dāng)

CnCn+i=l。時(shí),A寄存器的內(nèi)容減去B寄存器的內(nèi)容被乘數(shù)(即加上B寄

存器中內(nèi)容的反),加減之后再右移。無(wú)論哪種情況,右移是這樣進(jìn)行

的:A的最左位,即A一位,不僅要移入A。?,而且還要保留在A-中。

這要求保留A和C中的符號(hào)。這種移位方式稱(chēng)為算術(shù)移位(Arithmetic

Shift),因?yàn)樗A袅朔?hào)位。

第三章442011-12-31

圖3-10補(bǔ)碼乘法的Booth算法

第三章452011-12-31

5.除法運(yùn)算

除法要比乘法更復(fù)雜,但也是基于同樣的通用原則。如上所述,算法

的基礎(chǔ)是紙和筆的演算方法,而且操作涉及到重復(fù)的移位和加減法。

00001101商

除數(shù)1011)10010011被除數(shù)

1011

部分余001110

1011

001111

________1011

100余數(shù)

圖3-11無(wú)符號(hào)二進(jìn)制整數(shù)除法

第三章462011-12-31

圖3-11表示的是一個(gè)無(wú)符號(hào)二進(jìn)制整數(shù)長(zhǎng)除的例子。首先,從左到右

檢查被除數(shù)的位,直到被檢查的位所表示的數(shù)大于或等于除數(shù);這被稱(chēng)

為除數(shù)能去“除”此數(shù)。直到這個(gè)事件出現(xiàn)之前,一串0從左到右放入

商中,。當(dāng)事件出現(xiàn)時(shí),一個(gè)1放入商并且由此部分被除數(shù)中減去除數(shù)。

結(jié)果被稱(chēng)為部分余(PartialRemainder),由此開(kāi)始除法呈現(xiàn)一種循

環(huán)樣式。在每一循環(huán)中,被除數(shù)的其他位續(xù)加到部分余上,直到結(jié)果大

于或等于除數(shù)。同前,由這個(gè)數(shù)減去除數(shù)并產(chǎn)生新的部分余。此過(guò)程繼

續(xù)下去,直到被除數(shù)的所有位都被用完。

事實(shí)上,機(jī)器的運(yùn)算過(guò)程和人畢竟不同,人會(huì)心算,一看就知道夠不

夠減。但機(jī)器卻不會(huì)心算,必須先做減法,若余數(shù)為正,才知道夠減;

若余數(shù)為負(fù),才知道不夠減。不夠減時(shí)必須恢復(fù)原來(lái)的余數(shù),以便再繼

續(xù)往下運(yùn)算,這種方法稱(chēng)為恢復(fù)余數(shù)法。

第三章472011-12-31

要恢復(fù)原來(lái)的余數(shù),只要當(dāng)前的余數(shù)加上除數(shù)即可。但由于要恢復(fù)余

數(shù),使除法進(jìn)行過(guò)程的步數(shù)不固定,因此控制比較復(fù)雜。實(shí)際中常用不

恢復(fù)余數(shù)法,又稱(chēng)加減交替法。其特點(diǎn)是運(yùn)算過(guò)程中如出現(xiàn)不夠減,則

不必恢復(fù)余數(shù),根據(jù)余數(shù)符號(hào),可以繼續(xù)往下運(yùn)算,因此步數(shù)固定,控

制簡(jiǎn)單。

加減交替法的規(guī)則是:當(dāng)余數(shù)為正時(shí),商“1”,余數(shù)左移一位,減除

數(shù);當(dāng)余數(shù)為負(fù)時(shí),商“0”,余數(shù)左移一位,加除數(shù)。

第三章482011-12-31

3.3.2浮點(diǎn)四則運(yùn)算

1.浮點(diǎn)加法、減法運(yùn)算

設(shè)有兩個(gè)浮點(diǎn)數(shù)X和Y,它們分別為

X=2LxX

Y=。Yx2EY

其中Ex和Ey分別為數(shù)X和Y的階碼,Mx和%為X和Y的尾數(shù)。

兩個(gè)浮點(diǎn)數(shù)進(jìn)行加法和減法的運(yùn)算規(guī)則是:

EX-EYEY

Z=X±Y=(MxX2±MY)X2EX<EY

由于浮點(diǎn)數(shù)尾數(shù)的小數(shù)點(diǎn)均固定在第一數(shù)值位前,所以尾數(shù)的加減運(yùn)算

規(guī)則與定點(diǎn)數(shù)完全相同。但由于其階碼的大小有直接反映尾數(shù)有效值的

小數(shù)點(diǎn)位置,因此當(dāng)浮點(diǎn)數(shù)階碼不等時(shí),因兩尾數(shù)小數(shù)點(diǎn)的實(shí)際位置不

一樣,尾數(shù)部分無(wú)法直接進(jìn)行加減運(yùn)算,因此必須先進(jìn)行“對(duì)階”,

使兩數(shù)的小數(shù)點(diǎn)位置對(duì)齊。

第三章492011-12-31

完成浮點(diǎn)數(shù)加減法運(yùn)算的操作過(guò)程大體分為四個(gè)基本步驟:

(1)0操作數(shù)檢查;

(2)比較階碼并完成對(duì)階;

(3)尾數(shù)進(jìn)行加或減運(yùn)算;

⑷規(guī)格化結(jié)果并進(jìn)行舍入處理。

圖3?12所示為浮點(diǎn)數(shù)加減運(yùn)算的操作流程圖。

第三章502011-12-31

圖3-12浮點(diǎn)加減運(yùn)算的操作流程

第三章512011-12-31

第一步為0操作數(shù)檢查,如果判知兩個(gè)操作數(shù)X或Y中有一個(gè)數(shù)為0,那

么另一個(gè)數(shù)即為運(yùn)算結(jié)果,而沒(méi)有必要再進(jìn)行后續(xù)的一系列操作,以節(jié)

省運(yùn)算時(shí)間。

第二步是使兩個(gè)操作數(shù)的指數(shù)相同。兩個(gè)浮點(diǎn)數(shù)進(jìn)行加減,首先要

看兩個(gè)數(shù)的階碼是否相同,即小數(shù)點(diǎn)位置是否對(duì)齊。若兩個(gè)數(shù)階碼相同,

表示小數(shù)點(diǎn)是對(duì)齊的,就可以進(jìn)行尾數(shù)的加減運(yùn)算。反之,若兩個(gè)數(shù)階

碼不同,表示小數(shù)點(diǎn)位置沒(méi)有對(duì)齊,此時(shí)必須使兩個(gè)數(shù)階碼相同,這個(gè)

過(guò)程叫做對(duì)階。

第三步是尾數(shù)求和運(yùn)算,包括它們的符號(hào)。不論是加法還是減法,都

按加法進(jìn)行操作,其方法與定點(diǎn)加減運(yùn)算完全相同。

最后一步是規(guī)格化結(jié)果。若尾數(shù)部分得到的結(jié)果不是規(guī)格化數(shù),必須把

它變成規(guī)格化數(shù)。對(duì)于雙符號(hào)來(lái)說(shuō),規(guī)格化數(shù)的形式是001義…X或

110X...Xo

第三章522011-12-31

規(guī)格化處理的規(guī)則如下:

1)結(jié)果尾數(shù)的兩個(gè)符號(hào)位值不同(01或10),這就表明尾數(shù)運(yùn)算結(jié)果

溢出,應(yīng)進(jìn)行右規(guī)格化處理,即將結(jié)果尾數(shù)向右移一位,并將階碼值加

lo

2)若結(jié)果尾數(shù)運(yùn)算不溢出,但最高數(shù)位值與符號(hào)位的值相同,這就表

明不符合規(guī)格化規(guī)則,應(yīng)進(jìn)行左規(guī)格化處理,這時(shí)應(yīng)將結(jié)果尾數(shù)重復(fù)左

移,每移一位階碼減1,知道出現(xiàn)最高數(shù)值位與符號(hào)位的值不同為止。

在對(duì)階或向右規(guī)格化時(shí),尾數(shù)要向右移位。這樣被移位的尾數(shù)的低位

部分就會(huì)被丟掉,從而造成一定的誤差,因此要進(jìn)行舍入處理。簡(jiǎn)單的

舍入如處理方法有兩種:一種是“0舍1入”法,即如果右移時(shí)被丟掉的

數(shù)位的最高位為0則舍去,為1則將尾數(shù)的末位加1。另一種方法是“恒

置1”法,即只要數(shù)位被移掉,就在尾數(shù)的末位恒置1。

第三章532011-12-31

在IEEE754標(biāo)準(zhǔn)中,舍入處理提供了四種可選方法:

?就近舍入:結(jié)果被舍入成最近的可表示的數(shù)。其實(shí)質(zhì)就是通常所說(shuō)

的“四舍五入”。例如,尾數(shù)超出規(guī)定的23位的多余位數(shù)字是10010,

多于位的值超過(guò)規(guī)定的最低有效位值的一半,故最低有效位應(yīng)增1。若

多余的5位是01111,則簡(jiǎn)單的截尾即可。對(duì)多余的5位10000這種特殊情

況:若最低有效位現(xiàn)在為0,則截尾;若最低有效位現(xiàn)為1,則向上進(jìn)1

位使其變?yōu)?。

?朝+8舍入:結(jié)果向正無(wú)窮大方向取舍。對(duì)正數(shù)來(lái)說(shuō),只要多余位不

全為0,則向最低有效位進(jìn)1;對(duì)負(fù)數(shù)來(lái)說(shuō),則是簡(jiǎn)單的截尾。

?朝一8舍入:結(jié)果向負(fù)無(wú)窮大方向取舍。對(duì)正數(shù)來(lái)說(shuō),則是簡(jiǎn)單的截

尾;對(duì)負(fù)數(shù)來(lái)說(shuō),只要多余位不全為0,則向最低有效位進(jìn)1。

?朝0舍入:結(jié)果朝0取舍。即朝數(shù)軸原點(diǎn)方向舍入,就是簡(jiǎn)單的截尾。

無(wú)論尾數(shù)是正數(shù)還是負(fù)數(shù),截位都使取值的絕對(duì)總值比原值的絕對(duì)值小。

這種方法容易導(dǎo)致誤差。

第三章542011-12-31

2.浮點(diǎn)乘法、除法運(yùn)算

(1)浮點(diǎn)乘法、除法運(yùn)算規(guī)則

設(shè)有兩個(gè)浮點(diǎn)數(shù)X和Y:

可見(jiàn),乘積的尾數(shù)是相乘兩數(shù)的尾數(shù)之積,乘積的階碼是相乘兩數(shù)的

階碼之和。當(dāng)然,這里也有規(guī)格化和舍入等步驟。

設(shè)有兩個(gè)浮點(diǎn)數(shù)X和Y:

第三章552011-12-31

(2)浮點(diǎn)乘法、除法運(yùn)算步驟

浮點(diǎn)數(shù)的乘除運(yùn)算大體可分為四步:第一步,0操作數(shù)檢查;第二步,

階碼加/減操作;

第三步,尾數(shù)乘/除操作;第四步,結(jié)果規(guī)格化及舍入處理。

圖3-13所示為浮點(diǎn)乘法的流程圖。無(wú)論哪個(gè)操作數(shù)為0,乘積即為0。

下一步是指數(shù)相加。若指數(shù)是移碼(偏移值指數(shù))形式,指數(shù)的和將會(huì)

有雙倍的偏置值,故應(yīng)從和中減去一個(gè)偏置值??赡軙?huì)出現(xiàn)指數(shù)上溢或

下溢,此時(shí)應(yīng)結(jié)束算法并報(bào)告。

若積的指數(shù)在一個(gè)恰當(dāng)?shù)姆秶鷥?nèi),則下一步應(yīng)是有效數(shù)相乘,包括它

們的符號(hào)一起考慮。有效數(shù)相乘與整數(shù)相乘的方法相同。積的長(zhǎng)度將是

被乘數(shù)和乘數(shù)的長(zhǎng)度的兩倍,多余的位將在舍入期間丟失掉。

得出乘積之后,下一步則是結(jié)果的規(guī)格化和舍入處理,同加、減法所做

的一樣。注意,規(guī)格化可能導(dǎo)致指數(shù)下溢出現(xiàn)。

第三章562011-12-31

圖3-13浮點(diǎn)乘法的流程圖

第三章572011-12-31

圖3-14所示為浮點(diǎn)除除法

法流程圖。第一步是測(cè)試

x=o?A階碼相減

0,若除數(shù)為0,或報(bào)告出

Y,V

加偏移

錯(cuò),或認(rèn)為是一個(gè)無(wú)窮大Z

的數(shù),取決于具體的實(shí)現(xiàn)。

工A溢出報(bào)告

返回工酚碼溢出?

若被除數(shù)是0,則結(jié)果是0。K7

下一步是被除數(shù)的指數(shù)減爸碼下溢?>報(bào)告下溢

除數(shù)的指數(shù)。這個(gè)過(guò)程把V

\r

偏置值去掉了,所以必須尾數(shù)相除I返回

加上偏置值。然后對(duì)指數(shù)規(guī)格化

上溢或下溢進(jìn)行測(cè)試。▼

舍入

V

返回

圖3/4浮點(diǎn)除法流程圖

第三章582011-12-31

3.4算術(shù)邏輯運(yùn)算單元ALU

針對(duì)每一種算術(shù)運(yùn)算,都必須有一個(gè)相應(yīng)的基本硬件配置,其核心部

分是加法器和寄存器。當(dāng)需要完成邏輯運(yùn)算時(shí),勢(shì)必需要配置相應(yīng)的邏

輯電路,而ALU電路是既能完成算術(shù)運(yùn)算又能完成邏輯運(yùn)算的部件

3.4.1ALU電路

圖3-15是ALU框圖。圖中Aj和瑪為輸入變量;彩為控制信號(hào),&的不同

取值可決定該電路做哪種邏輯運(yùn)算;Fj是輸出函數(shù)。

圖3-15ALU框圖

第三章592011-12-31

為了實(shí)現(xiàn)算術(shù)/邏輯多功能運(yùn)算,則必須對(duì)全加器(F

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論