官术网_书友最值得收藏!

第2章 數據表示與運算

2.1 考點歸納

【考綱指定考點】

【題型以及考點分析】

本章主要介紹了計算機中數據的表示方式,以及運算方法。本章每年出1~3道選擇題或者一個選擇題一個大題。常考考點主要有定點數加減乘除運算,浮點數加減運算,以及IEEE754浮點數表示方法,溢出判斷,大小比較等,本章考點容易與C語言的相關知識點結合起來出題。

一、數制以及編碼

1進位計數制及相互轉換

(1)進位計數制

在進位計數制中,每個數位所用到的不同數碼的個數稱為基數,每個數碼所表示的數值等于該數碼本身乘以一個與它所在數位有關的常數,這個常數稱為位權。常用進位計數制有二進制,八進制,十進制,十六進制。

二進制:基數為2的計數制,只有0和1兩種數字符號,計數逢二進一,它的任意數位的權為2i,i為所在位數,常用于計算機中。

八進制:基數為8,有0~7共8個不同的數字符號,計數逢八進一,因為8=23,所以只要把二進制中的3位數碼編為一組就是一位八進制數碼,兩者之間的轉換極為方便。

十六進制:基數為16,每個數位可取0~9、A、B、C、D、E、F中的任意一個,其中A、B、C、D、E、F分別表示10~15。計數逢十六進一,4位二進制數碼與1位十六進制數碼相對應。

(2)各進制數間相互轉換

二進制轉八進制或十六進制

對于一個二進制數,如果其既包含整數部分,又包含小數部分,轉換時以小數點為界。其整數部分,從小數點開始往左數,轉換為八進制時,三位一組,轉換為十六進制時,四位一組,在數的最左邊可根據需要加“0”補齊;對于小數部分,從小數點開始往右數,也同樣將二進制數分為3位一組(八進制)或4位一組(十六進制),在數的最右邊也可根據需要加“0”補齊,然后分別用對應的八進制或十六進制數取代。

任意進制轉為十進制

將任意進制的數各位數碼與它們的權值相乘,再把乘積相加,就得到了一個十進制數。

十進制轉為任意進制

整數部分的轉換:整數部分除基取余,最先取得的余數作為最低位,最后取得的余數為最高位,商為0時結束。

小數部分的轉換:小數部分乘基取整,最先取得的整數為最高位,最后取得的整數為最低位,乘積為0(或滿足精度要求)時結束。

轉換后,將整數部分與小數部分合并即可得到轉換后的數。

2數據編碼

(1)數據真值與機器數

真值:帶有正、負號的數。

機器數:在計算機中將符號與數值一起編碼,這種符號數字化的數就成為機器數。真值是機器數所表示的實際值。

(2)BCD碼

BCD碼是指二進制編碼的十進制數(Binary Coded Decimal,BCD)采用4位二進制數來表示一位十進制數中的0~9這10個數碼,BCD有以下三種表示形式:

8421碼:它是一種有權碼,設其各位的數值為b3、b2、b1、b0,則權值從高到低依次為8、4、2、1,則它表示的十進制數為D=8b3+4b2+2b1+1b0

余3碼:它是一種無權碼,是在8421碼的基礎上加上(0011)2形成的,因每個數都多余“3”,故稱為余3碼。

2421碼:它也是一種有權碼,權值由高到低分別為2、4、2、1,特點是大于等于5的4位二進制數中最高位為1,小于5的最高位為0。

(3)字符與字符串的表示

字符的ASCII碼

ASCII碼是美國信息交換標準碼,后來被國際上普遍采用,標準ASCII用7位二進制編碼,可表示10個十進制數碼、52個英文大寫和小寫字母(A~Z,a~z)以及一定數量的專用符號,共128個字符。其中必須要知道,0~9的ASCII碼值為48(0110000)~57(0111001),其低4位,則正好是二進制形式的0~9。還有擴展的ASCII用8位二進制編碼,可表示256個字符,前128與標準ASCII相同。

漢字的表示與編碼

由于漢字字數很多,使用ASCII無法滿足需要。因此漢字采用其他編碼方式,目前我國已經發布了GB 2312—80,以及GB 18030等國家標準。

漢字的編碼包括漢字的輸入編碼、漢字內碼、漢字字形碼三種,它們是計算機中用于輸入、內部處理和輸出三種用途的編碼。

a.漢字的輸入編碼

漢字的輸入編碼一般有三種常用輸入碼:

國標區位碼:用數字串代表漢字,區位碼是國家標準局于1981年頒布的標準,用兩個字節表示一個漢字,每個字節用七位碼,它將漢字和圖形符號排列在一個94行94列的二維代碼表中。區碼和位碼各表示兩位十進制數,國標碼=(區位碼)16+2020H,漢字內碼=(國標碼)16+8080H。

拼音碼:以漢語拼音作為輸入碼,容易記憶,缺點重碼率高。

字形碼:將漢語筆畫用數字或者字符編碼,按一定順序輸入即可得到漢字。

b.漢字內碼

漢字內碼用于計算機存儲,處理加工,傳輸時所用的二進制編碼,與ASCII碼類似。

c.漢字字形碼

漢字字形碼用于顯示或者打印輸出,常用點陣或矢量表示。

字符串表示方式

字符串就是連續的一串字符,它們在主存中占用多個連續字節,每個字節存儲一個字符。目前主要有兩種方式存放字符串:

a.大端模式:按先存儲高位字節,后存儲低位字節的順序存放字符串的內容。

b.小端模式:可按先存儲低位字節,后存儲高位字節的順序存放字符串的內容。

3校驗碼

校驗碼是指據有發現錯誤或者指出錯誤位置的的數據編碼方式。其原理是使用冗余編碼,來檢驗或糾正錯誤。

校驗碼中,任意兩個合法編碼之間不同的二進制位數,而這兩個合法碼之間的二進制位數就稱為碼距。

碼距不小于2的數據校驗碼,開始具有檢錯的能力。碼距越大,檢、糾錯能力就越強,而且檢錯能力總是大于或等于糾錯能力,與此同時編碼效率也越來越低。

常用的校驗碼有以下三種:

(1)奇偶校驗碼

奇偶效驗碼,在原數據的尾部加上一位校驗碼,碼距為2,只能檢錯,不能糾錯,只有發生錯誤的位數為奇數時,它才能檢測出來。奇偶校驗實現的方法:由若干位有效信息(如一個字節),再加上一個二進制位(校驗位)組成校驗碼,校驗位的取值(0或1)將使整個校驗碼中。“1”的個數為奇數或偶數,所以有兩種可供選擇的校驗規律。

奇校驗碼:整個校驗碼中“1”的個數為奇數。

偶校驗碼:整個校驗碼中“1”的個數為偶數。

(2)海明碼

海明碼是一種多重(復式)奇偶檢錯系統。它將信息用邏輯形式編碼,以便能夠檢錯和糾錯。用在海明碼中的全部傳輸碼字是由原來的信息和附加的奇偶校驗位組成的。每一個這種奇偶位被編在傳輸碼字的特定位置上。這個系統對于錯誤的數位無論是原有信息位中的,還是附加校驗位中的都能把它分離出來。

推導并使用長度為m位的碼字的海明碼,所需步驟如下:

確定最小的校驗位數k,將它們記成D1、D2、…、Dk,每個校驗位符合不同的奇偶測試規定。

原有信息和k個校驗位一起編成長為m+k位的新碼字。選擇k校驗位(0或1)以滿足必要的奇偶條件。

對所接收的信息作所需的k個奇偶檢查。

如果所有的奇偶檢查結果均為正確的,則認為信息無錯誤。

如果發現有一個或多個錯了,則錯誤的位由這些檢查的結果來唯一地確定。

下面用一下例子說明海明碼的求解過程,假設n=4,k=3

確定海明碼的位數

設n為有效信息的位數,k為校驗位的位數,則信息位n和校驗位k應滿足:n+k≤2k1

海明碼位數為n+k=7≤23-1成立,則n、k有效。信息位設為D4D3D2D1(1010),共4位,校驗位P3P2P1,共3位。故其海明碼為H7H6H5H4H3H2H1

確定校驗位的分布

規定校驗位Pi在海明位號為2i1的位置上,其余各位為信息位,因此:

P1的海明位號為2i1=20=1,即H1為P1

P2的海明位號為2i1=21=2,即H2為P2

P3的海明位號為2i1=22=4,即H4為P3

將信息位按原來的順序插入,則海明碼各位的分布如下:

分組,以形成校驗關系

每個數據位用多個校驗位進行校驗,但要滿足:被校驗數據位的海明位號等于校驗該數據位的各校驗位海明位號之和。另外,校驗位不需要再被校驗。由題目要求可知D1由P2P1校驗,D2由P3P1校驗,D3由P3P2校驗,D4由P3P2P1校驗。

校驗位取值

校驗位Pi的值為第i組(由該校驗位校驗的數據位)所有位求異或。根據中的分組有:

P1=D1⊕D2⊕D3=0⊕1⊕1=0

P2=D1⊕D3⊕D4=0⊕0⊕1=1

P3=D2⊕D3⊕D4=1⊕0⊕1=0

所以,1010對應的海明碼為1010010

海明碼的校驗

每個校驗組分別利用校驗位和參與形成該校驗位的信息位進行奇偶校驗檢查,就構成了k個校驗方程:

S1=P1⊕D1⊕D2⊕D3

S2=P2⊕D1⊕D3⊕D4

S3=P3⊕D2⊕D3⊕D4

若S3S2S1的值為“000”,則說明無錯;否則說明出錯,而且這個數就是錯誤位的位號,如S3S2S1=001,說明第1位出錯,即H1出錯,直接將該位取反就達到了糾錯的目的。

(3)循環冗余校驗(CRC)碼

循環冗余校驗碼(CRC)的基本原理是:在K位信息碼后再拼接R位的校驗碼,整個編碼長度為N位,因此,這種編碼又叫(N,K)碼。對于一個給定的(N,K)碼,可以證明存在一個最高次冪為N-K=R的多項式G(x)。根據G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC碼的生成多項式。

CRC碼的生成步驟如下:

將x的最高冪次為R的生成多項式G(x)轉換成對應的R+1位二進制數;

將信息碼左移R位,相當與對應的信息多項式G(x)*2R

用生成多項式(二進制數)對信息碼做模2除,得到R位的余數;

將余數拼到信息碼左移后空出的位置,得到完整的CRC碼。

下面使用一個例子來說明,CRC校驗碼的生成過程。

設生成多項式為G(x)=x3+x2+1,信息碼為101001,求對應的CRC碼。

a.轉換

R=生成多項式最高冪次=3,K=信息碼長度=6,N=K+R=9。生成多項式G(x)對應的二進制碼為1101。

b.移位

將原信息碼左移R位,低位補0。得到101001000。

c.相除

對移位后的信息碼,用生成多項式進行模2除法,產生余數。模2加法和減法的結果相同,都是做異或運算,模2除法和算術除法類似,但每一位除(減)的結果不影響其他位,也就是不借位,步驟如下:

第一,用除數對被除數最高幾位做模2減(異或),不借位。

第二,除數右移一位,若余數最高位為1,商為1,并對余數做模2減。若余數最高位為0,商為0,除數繼續右移一位。

第三,循環直到余數位數小于除數時,該余數為最終余數。

模2除法,得到的余數為001,則報文101001編碼后的報文(即CRC碼)為101001001

d.檢錯和糾錯

接收端收到的CRC碼,用生成多項式G(x)做模2除法,若余數為0,則碼字無錯。

若接收端收的CRC碼為C9C8C7C6C5C4C3C2C1=101001011,將這個數據與1101進行模2除法,得到的余數為010,則說明C2出錯,將C2取反即可。

二、定點數的表示和運算

1定點數的表示

在計算機中的數據可以分為有符號數與無符號數。對于無符號數,整個機器字長的二進制位均為數值位,8位無符號數可表示范圍為0~255;對于有符號數,一般用最高位表示符號位,用0表示正,1表示負,其余位為數值位。

定點數是小數點位置固定的數。通常情況下,小數點位置固定在最高位(定點小數),或者小數點位置固定在最低位(定點整數)。

定點小數

在定點數中,小數點位置固定,表示小數時,小數點固定在最高位,故定點小數為純小數。數據X的形式為x0x1x2…xn其中x0為符號位,x1~xn是數值的有效部分,也稱為尾數,x1為最高有效位。其所能表示的最大正數為1-2n;最小負數為-(1-2n)。

定點整數

定點整數小數點位置在最后,表示純整數。數據X可表示為如下形式x0x1x2…xn其中x0為符號位,x1~xn是尾數,xn為最低有效位。X其所能表示的最大正數,真值等于2n1;其所能表示的最小負數為-(2n-1)。

2原碼,反碼,補碼,移碼

(1)原碼表示法

原碼用最高位表示該數的符號,其余的各位表示數的數值。其定義如下:

純小數的原碼定義:

整數原碼定義:

對于n+1的原碼來說,其小數的表示范圍為-(1-2n)≤X≤1-2n,整數表示范圍為-(2n-1)≤X≤2n-1,原碼數據表示范圍關于原點對稱。零的原碼有正零和負零兩種形式:[+0]=00000,[-0]=10000。

(2)反碼表示法

反碼:機器數的一種表示形式,最高位為符號位,其余位正數時與原碼相同,負數時取反。其定義如下:

純小數的反碼定義:

整數反碼定義:

對于字長為n+1的反碼而言,小數的表示范圍為-(1-2n)≤X≤1-2n,整數反碼的表示范圍為-(2n-1)≤X≤2n-1。0的反碼表示方式也有兩種:[+0]=0.0000,[-0]=1.1111。

(3)補碼表示法

補碼是計算機中廣泛使用的一種機器數表現形式,常用于計算機的計算過程中。

純小數的補碼定義:

純整數的補碼定義:

對于字長為n+1的補碼而言,小數的表示范圍為-1≤X≤1-2n,整數的表示范圍為-2n≤X≤2n-1,0的補碼表示是唯一的。即[+0]=[-0]=0.0000。

(4)移碼表示法

移碼(又叫增碼)是符號位取反的補碼,相當于在真值上加上一個偏置值,一般用做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。

移碼特點:

移碼中零的表示唯一,[+0]=[-0]=100…0。

一個真值的移碼和補碼僅差一個符號位。

移碼全0時,代表其最小值-2n;移碼全1時,表示其最大值2n-1。

移碼大真值就大,移碼小真值就小。

(5)原碼,反碼,補碼,移碼間相互轉換

對于整數而言,原碼,反碼,補碼形式均相同。

對于負數,原碼是符號位為1,數值部分取X絕對值的二進制。反碼是符號位為1,其它位是原碼取反。補碼是符號位為1,其它位是原碼取反,未位加1。也就是說,負數的補碼是其反碼末位加1。

移碼就是將符號位取反的補碼。

3定點數運算

(1)定點數移位運算

移位運算包括算術移位與邏輯移位,一般對有符號進行算術移位,邏輯移位一般對無符號數進行。

算術移位

在算術移位過程中,符號位不變。對于正數,移位后空位補0,負數時,原碼,反碼,補碼的填補方式有所不同。

a.原碼移位時,要使符號位不變,其空位均添0。

b.反碼移位時,符號位不變,其余空位部添1。

c.補碼左移時,空位出現在低位,添0;右移時因空位出現在高位,則添1。

邏輯移位

邏輯移位將操作數看做無符號數看待,移位規則:無論邏輯左移還是邏輯右移都在空缺位添0。

循環移位

循環移位分為帶進位標志位CF的循環移位(大循環)和不帶進位標志位的循環移位(小循環)。不帶標志的循環移位過程中,將最高位送到CF中,帶進位的循環移位,標志位參與移位。下面給出幾種移位的示意圖。

圖2-1 幾種循環移位方式

【例】在補碼表示的機器中,若寄存器A中原存的數為9EH,現存的數為CFH,則表明執行的一條指令是(  )

A.算術左移

B.邏輯左移

C.算術右移

D.邏輯右移

【答案】C

【解析】寄存器A中原存內容10011110,現存內容11001111,說明執行了一條算術右移指令。

(2)定點數原碼加/減法

在進行原碼加減運算時規則如下:

加法規則:先判符號位,若相同,絕對值相加,結果符號位不變;若不同,則做減法,絕對值大的數減去絕對值小的數,結果符號位與絕對值大的數相同。

減法規則:兩個原碼表示的數相減,首先將減數符號取反,然后將被減數與符號取反后的減數按原碼加法進行運算。

運算時注意機器字長,當左邊位出現溢出時,將溢出位丟掉。原碼運算在機器不易實現,故在計算機中采用補碼進行運算。

(3)定點數補碼加/減法

補碼進行加減運算規則簡單,容易實現。進行運算時,首先將數據變為補碼形式。其運算原則如下:

加法:整數[A]+[B]=[A+B](mod 2n1),小數[A]+[B]=[A+B](mod 2)。

減法:整數[A-B]=[A]+[-B](mod 2n1),小數[A-B]=[A]+[-B](mod 2)。

補碼運算的結果還是補碼。

【例】一個C語言程序在一臺32位機器上運行。程序中定義了三個變量x、y和z,其中x和z是int型,y為short型。當x=127,y=-9時,執行賦值語句z=x+y后,x、y和z的值分別是(  )。

A.x=0000007FH,y=FFF9H,z=00000076H

B.x=0000007FH,y=FFF9H,z=FFFF0076H

C.x=0000007FH,y=FFF7H,z=FFFF0076H

D.x=0000007FH,y=FFF7H,z=00000076H

【答案】D

【解析】結合題干及選項可知,int為32位,short為16位;又C語言的整型數據在內存中為補碼形式,故x、y的機器數寫為十六進制為0000007FH、FFF7H。執行z=x+y時,由于x為int型,y為short型,故需將y的類型強制轉換為int,在機器中通過符號位擴展實現,由于y的符號位為1,故在y的前面添加16個1,即可將y強制轉換為int型,其十六進制形式為FFFFFFF7H;然后執行加法,即0000007FH+FFFFFFF7H=00000076H(最高位的進位1自然丟棄)。

(4)定點數乘法

原碼一位乘法

原碼的一位乘法與進行手工計算的過程相似,將數值計算與符號運算分開,其符號為由兩數的符號位異或給出,數值部分由兩數絕對值相乘,其基本規則如下:

a.部分積的長度同被乘數,取n+1位,以便存放乘法過程中絕對值大于或等于1的值,初值為0。

b.從乘數的最低位yn開始判斷:若yn=1,則部分積加上被乘數x,然后右移一位;若yn=0,則部分積加上0,然后右移一位。

c.重復步驟b,判斷n次。

原碼一位乘法運算過程中的右移操作均為邏輯右移。

補碼一位乘法

補碼一位乘法,首先將兩數化為補碼形式,符號位直接參與計算,其基本運算規則如下:

a.被乘數與部分積一般取雙符號位參與運算,初值為0,乘數可取單符號位。

b.乘數末位增設附加位,且初值為0。

c.根據(yi,yi1)的取值來確定操作。

表2-1 位移規則

d.移位按補碼右移規則進行。

補碼算法,對于n位數,要進行n+1次,最后一次不移位。

(5)定點數除法

原碼不恢復余數法

原碼不恢復余數法是一種原碼常用的除法運算,其特點是,符號運算與數值運算分離,在運算過程中,不用再花費時間恢復負數余數。其基本規則如下:

a.商的符號由除數與被除數的符號異或得到。

b.當余數為正時,商上1,余數和商左移一位,再減去除數。

c.當余數為負時,商上0,余數和商左移一位,再加上除數。

d.最后一步,不夠減時,商0,加上除數,恢復余數。

補碼除法運算(加減交替法)

補碼一位除法:符號位與數值位一起參加運算。第一步根據被除數和除數的符號決定是做加法還是減法;上商的原則根據余數和除數的符號位共同決定,同號上商“1”,異號上商“0”最后一步商恒置“1”。

加減交替法的規則如下:

a.除數與被除數均用補碼表示,商和余數也用補碼表示。

b.若被除數與除數同號,被除數減去除數;若被除數與除數異號,被除數加上除數。

c.若余數與除數同號,商上1,余數左移一位減去除數;若余數與除數異號,商上0,余數左移一位加上除數。

d.一般采用“末位恒置1”法,有精度要求另處理。

(6)溢出概念以及判斷方法

溢出是指數據運算結果超出了數的表示范圍,在計算機中才有的概念,因為計算機中數據表示范圍有限。一般常用一下幾種方式判斷數據是否溢出:

采用單符號位

在計算機中,無論加法還是減法都是采用加法的形式實現,如果參加操作的兩個數數符相同,但是結果的操作符與原操作數不同,則發生溢出。

采用雙符號位

在雙符號位表示法中兩個符號位相同,表示未溢出,兩個符號位S1S2不同,表示溢出,真正的符號有高位表示。主要由以下四種情況:

a.S1S2=00,表示結果為正數,無溢出;

b.S1S2=01,表示結果正溢出;

c.S1S2=10,表示結果負溢出;

d.S1S2=11,表示結果為負數,無溢出。

用一位符號位以及數據位的進位情況判斷溢出

如果符號位的進位Cs與最高數位的進位C1相同,則說明沒有溢出,否則表示發生溢出。

【例】定點原碼除法中,每次做被除數(余數)減除數,根據所得差的符號,判斷是否夠減,差數>0,說明夠減,商“1”;差數<0,說明不夠減,商“0”;第一位除法所求的商表示(  )。

A.商的符號

B.商的第1位數值

C.商數溢出與否

D.無關

【答案】C

【解析】第一位除法所求的商若為0,則說明不夠減,滿足|被除數|<|除數|;第一位除法所求的商若為1,則說明夠減,不滿足|被除數|<|除數|。因此,第一位除法所求的商表示商數的溢出與否。

三、浮點數的表示和運算

1浮點數的表示

浮點數就是將比例因子以適當的形式表示在數據中,而且小數點的位置可以根據需要進行改變。浮點數的表示方法擴大了數據的表示范圍。常用的浮點數表示方法如下:

圖2-2 普通浮點數表示法

浮點數表示主要包括兩個部分階碼部分與數值部分。階碼由階符與階碼數值部分組成,數值部分由數符與尾數部分組成。小數點隱含表示,在尾數之前。階碼為整數,與階符一起反應符點數的表示范圍,尾數反應浮點數的精度。

(1)浮點數的規格化

浮點數的規格化操作就是調整浮點數的尾數和階碼的大小,浮點數在尾數的最高數位上是一個有效值(浮點數0除外)。一般來說,規格化操作主要有兩種:

左規:當浮點數尾數最高位不為1時要進行規格化處理,將尾數左移一位,階碼減1(基數為2時)的方法稱為左規。

右規:當浮點數尾數出現溢出時,將尾數右移一位,階碼加1(基數為2時),這種方法稱為右規。規格化浮點數的尾數M的絕對值應滿足:1/r≤|M|≤1(r為基數)。

尾數的基數為2時,原碼規格化數的尾數最高位一定是1,補碼規格化數的尾數最高位一定與尾數符號位相反。基數不同,浮點數的規格化形式也不同。

(2)IEEE754標準

IEEE754標準的常用格式如下:

圖2-3 IEEE754浮點數表示法

其中階符采用隱含表示,階碼用移碼表示,尾數用原碼表示。有三種常用格式:短浮點型,長浮點型,臨時浮點型。其中數符都為1位,短浮點型階碼8位,尾數23位,偏置值為127。長浮點型階碼11位,尾數53位,偏置值1023。臨時浮點型,階碼15位,尾數64。

在IEEE754標準中,實際階碼值=E-偏置值。而且對于規格化的二進制浮點數,數值的最高位總是“1”,為了能使尾數多表示一位有效位,將這個“1”隱含,因此尾數數值實際上是24位。隱含的“1”是一位整數。在浮點格式中表示出來的23位尾數是純小數。規格化的短浮點數的真值為:(-1)s×1.M×2E-127,規格化長浮點數的真值為:(-1)s×1.M×2E-1023

2浮點數加減運算

浮點數運算時采用補碼形式,運算時階符運算與位數運算分開,先做階符運算,在進行尾數運算。浮點數運算包括以下幾個步驟:

(1)對階

對階就是使得兩個浮點數的階碼相等。為此首先需要求取兩數的階碼差M,小階向大階看齊,將階碼小的尾數右移M位(基數為2),使得兩個數的階碼相等。尾數右移時,舍棄掉有效位會產生誤差,影響精度。

(2)尾數求和

將對階后的尾數按定點數加(減)運算規則運算。

(3)規格化

規格化分為左規與右規兩種,規格化的方法見上文。

(4)舍入處理

在浮點數的對階和右規的過程中,可能會將尾數低位丟失,此時需要采取一些從處理方法降低精度損失。常見的舍入方法有:

0舍1入法:在尾數右移時,如果被移去的最高數值位為0,則舍去;被移去的最高數值位為1,則在尾數的末位加1。這樣做可能會使尾數又溢出,此時需再做一次右規。

恒置1法:尾數右移時,不論丟掉的最高數值位是1還是0,都使右移后的尾數末位恒置1。

(5)溢出判斷

浮點數的溢出與否是由階碼的符號決定的,尾數溢出浮點數不一定溢出。使用雙符號位時,當階碼的符號位為“01”時,即階碼大于最大階碼,表示上溢,此時會引發中斷進行處理;當階碼的符號位出現“10”時,即階碼小于最小階碼,表示下溢,按機器零處理,不會引起中斷。

【例】浮點數加減運算過程一般包括對階、尾數運算、規格化、舍人和判斷溢出等步驟。設浮點數的階碼和尾數均采用補碼表示,且位數分別為5位和7位(均含2位符號位)。若有兩個數X=27×29/32,Y=25×5/8,則用浮點加法計算X+Y的最終結果是(  )。

A.001111100010

B.001110100010

C.010000010001

D.發生溢出

【答案】D

【解析】根據題意,X可記為00,111;00,11101(分號前為階碼,分號后為尾數),Y可記為00,101;00,10100;首先對階,X、Y階碼相減,即00,111一00,101=00,111+11,011=00,010(最高位進位自然丟棄),可知X的階碼比Y的階碼大2,根據小階向大階看齊的原則,將Y的階碼加2,尾數右移2位,得Y為00,111;00,00101;尾數相加,即00,11101+00,00101=01,00010,尾數相加結果符號位為01,故需進行右規;規格化,將尾數右移1位,階碼加1,得X+Y為01,000;00,10001,階碼符號位為01,說明發生溢出。

四.算術邏輯單元(不是重點)

1.一位全加器

一位全加器實現了兩個一位數據的加法,其有加數A被加數B下級進位Ci1三個輸入,有運算結果S與進位Ci兩個輸出。其邏輯表達式為:

S=A⊕B⊕Ci-1

Ci=AB+(A⊕B)Ci-1

2串行加法器

串行加法器只有一個全加器,數據逐位送入加法器中進行運算。如果操作數位長為n,加法就要分n次進行,每次產生一位和,結果串行的送到寄存器中,用觸發器來保存進位信號,并參與下一次計算。

3并行加法器

用n位全加器實現兩個n位操作數各位同時相加,這種加法器稱謂并行加法器。并行加法器中全加器的位數與操作數的位數相同。并行加法器從相對于串行加法器來說速度提升不少。但是并行加法器在進位傳遞時會產生時延,并且并行加法器的最長運算時間由此時延決定。

并行加法器有兩種常用的進位方式:

(1)串行進位

將n個全加器串聯,每一個全加器的進位輸入依賴于上一級的進位輸出。采用此種方式,進位時延大,但是全加器結構簡單。

(2)并行進位

將各級全加器的進位信號同時作為全加器的輸入,同時形成進位信號。采用并行進位方式提高了全加器的運行速度,相對應的硬件成本也增加。

4ALU邏輯算術單元

ALU是一種組合邏輯電路,它能進行多種算術運算和邏輯運算。ALU的核心是一個并行加法器,通過此加法器可以完成加減乘除等算術運算。同時ALU也能執行“與”“或”“非”等邏輯運算。ALU通過函數發生器產生不同信號,以完成不同操作。其結構如下圖所示。

圖2-4 算術邏輯單元

Ai和Bi為輸入變量;Si為控制信號,Si的不同取值可決定該電路做哪一種算術運算或哪一種邏輯運算;Fi為輸出函數;Ci為進位信息。

主站蜘蛛池模板: 永修县| 宣武区| 宕昌县| 天柱县| 桃源县| 龙井市| 柏乡县| 塔河县| 浦县| 修文县| 互助| 云梦县| 商都县| 新安县| 青岛市| 开江县| 普洱| 海城市| 惠州市| 阿克| 辛集市| 玉屏| 宁安市| 明水县| 镇坪县| 南江县| 怀远县| 建昌县| 正蓝旗| 思茅市| 新化县| 张家口市| 平罗县| 凌云县| 灵山县| 肃宁县| 松滋市| 信丰县| 桦甸市| 陆丰市| 西吉县|