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

第2章 數(shù)據(jù)表示與運(yùn)算

2.1 考點(diǎn)歸納

【考綱指定考點(diǎn)】

【題型以及考點(diǎn)分析】

本章主要介紹了計(jì)算機(jī)中數(shù)據(jù)的表示方式,以及運(yùn)算方法。本章每年出1~3道選擇題或者一個(gè)選擇題一個(gè)大題。常考考點(diǎn)主要有定點(diǎn)數(shù)加減乘除運(yùn)算,浮點(diǎn)數(shù)加減運(yùn)算,以及IEEE754浮點(diǎn)數(shù)表示方法,溢出判斷,大小比較等,本章考點(diǎn)容易與C語言的相關(guān)知識(shí)點(diǎn)結(jié)合起來出題。

一、數(shù)制以及編碼

1進(jìn)位計(jì)數(shù)制及相互轉(zhuǎn)換

(1)進(jìn)位計(jì)數(shù)制

在進(jìn)位計(jì)數(shù)制中,每個(gè)數(shù)位所用到的不同數(shù)碼的個(gè)數(shù)稱為基數(shù),每個(gè)數(shù)碼所表示的數(shù)值等于該數(shù)碼本身乘以一個(gè)與它所在數(shù)位有關(guān)的常數(shù),這個(gè)常數(shù)稱為位權(quán)。常用進(jìn)位計(jì)數(shù)制有二進(jìn)制,八進(jìn)制,十進(jìn)制,十六進(jìn)制。

二進(jìn)制:基數(shù)為2的計(jì)數(shù)制,只有0和1兩種數(shù)字符號(hào),計(jì)數(shù)逢二進(jìn)一,它的任意數(shù)位的權(quán)為2i,i為所在位數(shù),常用于計(jì)算機(jī)中。

八進(jìn)制:基數(shù)為8,有0~7共8個(gè)不同的數(shù)字符號(hào),計(jì)數(shù)逢八進(jìn)一,因?yàn)?=23,所以只要把二進(jìn)制中的3位數(shù)碼編為一組就是一位八進(jìn)制數(shù)碼,兩者之間的轉(zhuǎn)換極為方便。

十六進(jìn)制:基數(shù)為16,每個(gè)數(shù)位可取0~9、A、B、C、D、E、F中的任意一個(gè),其中A、B、C、D、E、F分別表示10~15。計(jì)數(shù)逢十六進(jìn)一,4位二進(jìn)制數(shù)碼與1位十六進(jìn)制數(shù)碼相對(duì)應(yīng)。

(2)各進(jìn)制數(shù)間相互轉(zhuǎn)換

二進(jìn)制轉(zhuǎn)八進(jìn)制或十六進(jìn)制

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

任意進(jìn)制轉(zhuǎn)為十進(jìn)制

將任意進(jìn)制的數(shù)各位數(shù)碼與它們的權(quán)值相乘,再把乘積相加,就得到了一個(gè)十進(jìn)制數(shù)。

十進(jìn)制轉(zhuǎn)為任意進(jìn)制

整數(shù)部分的轉(zhuǎn)換:整數(shù)部分除基取余,最先取得的余數(shù)作為最低位,最后取得的余數(shù)為最高位,商為0時(shí)結(jié)束。

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

轉(zhuǎn)換后,將整數(shù)部分與小數(shù)部分合并即可得到轉(zhuǎn)換后的數(shù)。

2數(shù)據(jù)編碼

(1)數(shù)據(jù)真值與機(jī)器數(shù)

真值:帶有正、負(fù)號(hào)的數(shù)。

機(jī)器數(shù):在計(jì)算機(jī)中將符號(hào)與數(shù)值一起編碼,這種符號(hào)數(shù)字化的數(shù)就成為機(jī)器數(shù)。真值是機(jī)器數(shù)所表示的實(shí)際值。

(2)BCD碼

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

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

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

2421碼:它也是一種有權(quán)碼,權(quán)值由高到低分別為2、4、2、1,特點(diǎn)是大于等于5的4位二進(jìn)制數(shù)中最高位為1,小于5的最高位為0。

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

字符的ASCII碼

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

漢字的表示與編碼

由于漢字字?jǐn)?shù)很多,使用ASCII無法滿足需要。因此漢字采用其他編碼方式,目前我國已經(jīng)發(fā)布了GB 2312—80,以及GB 18030等國家標(biāo)準(zhǔn)。

漢字的編碼包括漢字的輸入編碼、漢字內(nèi)碼、漢字字形碼三種,它們是計(jì)算機(jī)中用于輸入、內(nèi)部處理和輸出三種用途的編碼。

a.漢字的輸入編碼

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

國標(biāo)區(qū)位碼:用數(shù)字串代表漢字,區(qū)位碼是國家標(biāo)準(zhǔn)局于1981年頒布的標(biāo)準(zhǔn),用兩個(gè)字節(jié)表示一個(gè)漢字,每個(gè)字節(jié)用七位碼,它將漢字和圖形符號(hào)排列在一個(gè)94行94列的二維代碼表中。區(qū)碼和位碼各表示兩位十進(jìn)制數(shù),國標(biāo)碼=(區(qū)位碼)16+2020H,漢字內(nèi)碼=(國標(biāo)碼)16+8080H。

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

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

b.漢字內(nèi)碼

漢字內(nèi)碼用于計(jì)算機(jī)存儲(chǔ),處理加工,傳輸時(shí)所用的二進(jìn)制編碼,與ASCII碼類似。

c.漢字字形碼

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

字符串表示方式

字符串就是連續(xù)的一串字符,它們?cè)谥鞔嬷姓加枚鄠€(gè)連續(xù)字節(jié),每個(gè)字節(jié)存儲(chǔ)一個(gè)字符。目前主要有兩種方式存放字符串:

a.大端模式:按先存儲(chǔ)高位字節(jié),后存儲(chǔ)低位字節(jié)的順序存放字符串的內(nèi)容。

b.小端模式:可按先存儲(chǔ)低位字節(jié),后存儲(chǔ)高位字節(jié)的順序存放字符串的內(nèi)容。

3校驗(yàn)碼

校驗(yàn)碼是指據(jù)有發(fā)現(xiàn)錯(cuò)誤或者指出錯(cuò)誤位置的的數(shù)據(jù)編碼方式。其原理是使用冗余編碼,來檢驗(yàn)或糾正錯(cuò)誤。

校驗(yàn)碼中,任意兩個(gè)合法編碼之間不同的二進(jìn)制位數(shù),而這兩個(gè)合法碼之間的二進(jìn)制位數(shù)就稱為碼距。

碼距不小于2的數(shù)據(jù)校驗(yàn)碼,開始具有檢錯(cuò)的能力。碼距越大,檢、糾錯(cuò)能力就越強(qiáng),而且檢錯(cuò)能力總是大于或等于糾錯(cuò)能力,與此同時(shí)編碼效率也越來越低。

常用的校驗(yàn)碼有以下三種:

(1)奇偶校驗(yàn)碼

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

奇校驗(yàn)碼:整個(gè)校驗(yàn)碼中“1”的個(gè)數(shù)為奇數(shù)。

偶校驗(yàn)碼:整個(gè)校驗(yàn)碼中“1”的個(gè)數(shù)為偶數(shù)。

(2)海明碼

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

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

確定最小的校驗(yàn)位數(shù)k,將它們記成D1、D2、…、Dk,每個(gè)校驗(yàn)位符合不同的奇偶測(cè)試規(guī)定。

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

對(duì)所接收的信息作所需的k個(gè)奇偶檢查。

如果所有的奇偶檢查結(jié)果均為正確的,則認(rèn)為信息無錯(cuò)誤。

如果發(fā)現(xiàn)有一個(gè)或多個(gè)錯(cuò)了,則錯(cuò)誤的位由這些檢查的結(jié)果來唯一地確定。

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

確定海明碼的位數(shù)

設(shè)n為有效信息的位數(shù),k為校驗(yàn)位的位數(shù),則信息位n和校驗(yàn)位k應(yīng)滿足:n+k≤2k1

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

確定校驗(yàn)位的分布

規(guī)定校驗(yàn)位Pi在海明位號(hào)為2i1的位置上,其余各位為信息位,因此:

P1的海明位號(hào)為2i1=20=1,即H1為P1

P2的海明位號(hào)為2i1=21=2,即H2為P2

P3的海明位號(hào)為2i1=22=4,即H4為P3

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

分組,以形成校驗(yàn)關(guān)系

每個(gè)數(shù)據(jù)位用多個(gè)校驗(yàn)位進(jìn)行校驗(yàn),但要滿足:被校驗(yàn)數(shù)據(jù)位的海明位號(hào)等于校驗(yàn)該數(shù)據(jù)位的各校驗(yàn)位海明位號(hào)之和。另外,校驗(yàn)位不需要再被校驗(yàn)。由題目要求可知D1由P2P1校驗(yàn),D2由P3P1校驗(yàn),D3由P3P2校驗(yàn),D4由P3P2P1校驗(yàn)。

校驗(yàn)位取值

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

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對(duì)應(yīng)的海明碼為1010010

海明碼的校驗(yàn)

每個(gè)校驗(yàn)組分別利用校驗(yàn)位和參與形成該校驗(yàn)位的信息位進(jìn)行奇偶校驗(yàn)檢查,就構(gòu)成了k個(gè)校驗(yàn)方程:

S1=P1⊕D1⊕D2⊕D3

S2=P2⊕D1⊕D3⊕D4

S3=P3⊕D2⊕D3⊕D4

若S3S2S1的值為“000”,則說明無錯(cuò);否則說明出錯(cuò),而且這個(gè)數(shù)就是錯(cuò)誤位的位號(hào),如S3S2S1=001,說明第1位出錯(cuò),即H1出錯(cuò),直接將該位取反就達(dá)到了糾錯(cuò)的目的。

(3)循環(huán)冗余校驗(yàn)(CRC)碼

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

CRC碼的生成步驟如下:

將x的最高冪次為R的生成多項(xiàng)式G(x)轉(zhuǎn)換成對(duì)應(yīng)的R+1位二進(jìn)制數(shù);

將信息碼左移R位,相當(dāng)與對(duì)應(yīng)的信息多項(xiàng)式G(x)*2R

用生成多項(xiàng)式(二進(jìn)制數(shù))對(duì)信息碼做模2除,得到R位的余數(shù);

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

下面使用一個(gè)例子來說明,CRC校驗(yàn)碼的生成過程。

設(shè)生成多項(xiàng)式為G(x)=x3+x2+1,信息碼為101001,求對(duì)應(yīng)的CRC碼。

a.轉(zhuǎn)換

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

b.移位

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

c.相除

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

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

第二,除數(shù)右移一位,若余數(shù)最高位為1,商為1,并對(duì)余數(shù)做模2減。若余數(shù)最高位為0,商為0,除數(shù)繼續(xù)右移一位。

第三,循環(huán)直到余數(shù)位數(shù)小于除數(shù)時(shí),該余數(shù)為最終余數(shù)。

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

d.檢錯(cuò)和糾錯(cuò)

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

若接收端收的CRC碼為C9C8C7C6C5C4C3C2C1=101001011,將這個(gè)數(shù)據(jù)與1101進(jìn)行模2除法,得到的余數(shù)為010,則說明C2出錯(cuò),將C2取反即可。

二、定點(diǎn)數(shù)的表示和運(yùn)算

1定點(diǎn)數(shù)的表示

在計(jì)算機(jī)中的數(shù)據(jù)可以分為有符號(hào)數(shù)與無符號(hào)數(shù)。對(duì)于無符號(hào)數(shù),整個(gè)機(jī)器字長的二進(jìn)制位均為數(shù)值位,8位無符號(hào)數(shù)可表示范圍為0~255;對(duì)于有符號(hào)數(shù),一般用最高位表示符號(hào)位,用0表示正,1表示負(fù),其余位為數(shù)值位。

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

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

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

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

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

2原碼,反碼,補(bǔ)碼,移碼

(1)原碼表示法

原碼用最高位表示該數(shù)的符號(hào),其余的各位表示數(shù)的數(shù)值。其定義如下:

純小數(shù)的原碼定義:

整數(shù)原碼定義:

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

(2)反碼表示法

反碼:機(jī)器數(shù)的一種表示形式,最高位為符號(hào)位,其余位正數(shù)時(shí)與原碼相同,負(fù)數(shù)時(shí)取反。其定義如下:

純小數(shù)的反碼定義:

整數(shù)反碼定義:

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

(3)補(bǔ)碼表示法

補(bǔ)碼是計(jì)算機(jī)中廣泛使用的一種機(jī)器數(shù)表現(xiàn)形式,常用于計(jì)算機(jī)的計(jì)算過程中。

純小數(shù)的補(bǔ)碼定義:

純整數(shù)的補(bǔ)碼定義:

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

(4)移碼表示法

移碼(又叫增碼)是符號(hào)位取反的補(bǔ)碼,相當(dāng)于在真值上加上一個(gè)偏置值,一般用做浮點(diǎn)數(shù)的階碼,引入的目的是為了保證浮點(diǎn)數(shù)的機(jī)器零為全0。

移碼特點(diǎn):

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

一個(gè)真值的移碼和補(bǔ)碼僅差一個(gè)符號(hào)位。

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

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

(5)原碼,反碼,補(bǔ)碼,移碼間相互轉(zhuǎn)換

對(duì)于整數(shù)而言,原碼,反碼,補(bǔ)碼形式均相同。

對(duì)于負(fù)數(shù),原碼是符號(hào)位為1,數(shù)值部分取X絕對(duì)值的二進(jìn)制。反碼是符號(hào)位為1,其它位是原碼取反。補(bǔ)碼是符號(hào)位為1,其它位是原碼取反,未位加1。也就是說,負(fù)數(shù)的補(bǔ)碼是其反碼末位加1。

移碼就是將符號(hào)位取反的補(bǔ)碼。

3定點(diǎn)數(shù)運(yùn)算

(1)定點(diǎn)數(shù)移位運(yùn)算

移位運(yùn)算包括算術(shù)移位與邏輯移位,一般對(duì)有符號(hào)進(jìn)行算術(shù)移位,邏輯移位一般對(duì)無符號(hào)數(shù)進(jìn)行。

算術(shù)移位

在算術(shù)移位過程中,符號(hào)位不變。對(duì)于正數(shù),移位后空位補(bǔ)0,負(fù)數(shù)時(shí),原碼,反碼,補(bǔ)碼的填補(bǔ)方式有所不同。

a.原碼移位時(shí),要使符號(hào)位不變,其空位均添0。

b.反碼移位時(shí),符號(hào)位不變,其余空位部添1。

c.補(bǔ)碼左移時(shí),空位出現(xiàn)在低位,添0;右移時(shí)因空位出現(xiàn)在高位,則添1。

邏輯移位

邏輯移位將操作數(shù)看做無符號(hào)數(shù)看待,移位規(guī)則:無論邏輯左移還是邏輯右移都在空缺位添0。

循環(huán)移位

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

圖2-1 幾種循環(huán)移位方式

【例】在補(bǔ)碼表示的機(jī)器中,若寄存器A中原存的數(shù)為9EH,現(xiàn)存的數(shù)為CFH,則表明執(zhí)行的一條指令是(  )

A.算術(shù)左移

B.邏輯左移

C.算術(shù)右移

D.邏輯右移

【答案】C

【解析】寄存器A中原存內(nèi)容10011110,現(xiàn)存內(nèi)容11001111,說明執(zhí)行了一條算術(shù)右移指令。

(2)定點(diǎn)數(shù)原碼加/減法

在進(jìn)行原碼加減運(yùn)算時(shí)規(guī)則如下:

加法規(guī)則:先判符號(hào)位,若相同,絕對(duì)值相加,結(jié)果符號(hào)位不變;若不同,則做減法,絕對(duì)值大的數(shù)減去絕對(duì)值小的數(shù),結(jié)果符號(hào)位與絕對(duì)值大的數(shù)相同。

減法規(guī)則:兩個(gè)原碼表示的數(shù)相減,首先將減數(shù)符號(hào)取反,然后將被減數(shù)與符號(hào)取反后的減數(shù)按原碼加法進(jìn)行運(yùn)算。

運(yùn)算時(shí)注意機(jī)器字長,當(dāng)左邊位出現(xiàn)溢出時(shí),將溢出位丟掉。原碼運(yùn)算在機(jī)器不易實(shí)現(xiàn),故在計(jì)算機(jī)中采用補(bǔ)碼進(jìn)行運(yùn)算。

(3)定點(diǎn)數(shù)補(bǔ)碼加/減法

補(bǔ)碼進(jìn)行加減運(yùn)算規(guī)則簡單,容易實(shí)現(xiàn)。進(jìn)行運(yùn)算時(shí),首先將數(shù)據(jù)變?yōu)檠a(bǔ)碼形式。其運(yùn)算原則如下:

加法:整數(shù)[A]補(bǔ)+[B]補(bǔ)=[A+B]補(bǔ)(mod 2n1),小數(shù)[A]補(bǔ)+[B]補(bǔ)=[A+B]補(bǔ)(mod 2)。

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

補(bǔ)碼運(yùn)算的結(jié)果還是補(bǔ)碼。

【例】一個(gè)C語言程序在一臺(tái)32位機(jī)器上運(yùn)行。程序中定義了三個(gè)變量x、y和z,其中x和z是int型,y為short型。當(dāng)x=127,y=-9時(shí),執(zhí)行賦值語句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

【解析】結(jié)合題干及選項(xiàng)可知,int為32位,short為16位;又C語言的整型數(shù)據(jù)在內(nèi)存中為補(bǔ)碼形式,故x、y的機(jī)器數(shù)寫為十六進(jìn)制為0000007FH、FFF7H。執(zhí)行z=x+y時(shí),由于x為int型,y為short型,故需將y的類型強(qiáng)制轉(zhuǎn)換為int,在機(jī)器中通過符號(hào)位擴(kuò)展實(shí)現(xiàn),由于y的符號(hào)位為1,故在y的前面添加16個(gè)1,即可將y強(qiáng)制轉(zhuǎn)換為int型,其十六進(jìn)制形式為FFFFFFF7H;然后執(zhí)行加法,即0000007FH+FFFFFFF7H=00000076H(最高位的進(jìn)位1自然丟棄)。

(4)定點(diǎn)數(shù)乘法

原碼一位乘法

原碼的一位乘法與進(jìn)行手工計(jì)算的過程相似,將數(shù)值計(jì)算與符號(hào)運(yùn)算分開,其符號(hào)為由兩數(shù)的符號(hào)位異或給出,數(shù)值部分由兩數(shù)絕對(duì)值相乘,其基本規(guī)則如下:

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

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

c.重復(fù)步驟b,判斷n次。

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

補(bǔ)碼一位乘法

補(bǔ)碼一位乘法,首先將兩數(shù)化為補(bǔ)碼形式,符號(hào)位直接參與計(jì)算,其基本運(yùn)算規(guī)則如下:

a.被乘數(shù)與部分積一般取雙符號(hào)位參與運(yùn)算,初值為0,乘數(shù)可取單符號(hào)位。

b.乘數(shù)末位增設(shè)附加位,且初值為0。

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

表2-1 位移規(guī)則

d.移位按補(bǔ)碼右移規(guī)則進(jìn)行。

補(bǔ)碼算法,對(duì)于n位數(shù),要進(jìn)行n+1次,最后一次不移位。

(5)定點(diǎn)數(shù)除法

原碼不恢復(fù)余數(shù)法

原碼不恢復(fù)余數(shù)法是一種原碼常用的除法運(yùn)算,其特點(diǎn)是,符號(hào)運(yùn)算與數(shù)值運(yùn)算分離,在運(yùn)算過程中,不用再花費(fèi)時(shí)間恢復(fù)負(fù)數(shù)余數(shù)。其基本規(guī)則如下:

a.商的符號(hào)由除數(shù)與被除數(shù)的符號(hào)異或得到。

b.當(dāng)余數(shù)為正時(shí),商上1,余數(shù)和商左移一位,再減去除數(shù)。

c.當(dāng)余數(shù)為負(fù)時(shí),商上0,余數(shù)和商左移一位,再加上除數(shù)。

d.最后一步,不夠減時(shí),商0,加上除數(shù),恢復(fù)余數(shù)。

補(bǔ)碼除法運(yùn)算(加減交替法)

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

加減交替法的規(guī)則如下:

a.除數(shù)與被除數(shù)均用補(bǔ)碼表示,商和余數(shù)也用補(bǔ)碼表示。

b.若被除數(shù)與除數(shù)同號(hào),被除數(shù)減去除數(shù);若被除數(shù)與除數(shù)異號(hào),被除數(shù)加上除數(shù)。

c.若余數(shù)與除數(shù)同號(hào),商上1,余數(shù)左移一位減去除數(shù);若余數(shù)與除數(shù)異號(hào),商上0,余數(shù)左移一位加上除數(shù)。

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

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

溢出是指數(shù)據(jù)運(yùn)算結(jié)果超出了數(shù)的表示范圍,在計(jì)算機(jī)中才有的概念,因?yàn)橛?jì)算機(jī)中數(shù)據(jù)表示范圍有限。一般常用一下幾種方式判斷數(shù)據(jù)是否溢出:

采用單符號(hào)位

在計(jì)算機(jī)中,無論加法還是減法都是采用加法的形式實(shí)現(xiàn),如果參加操作的兩個(gè)數(shù)數(shù)符相同,但是結(jié)果的操作符與原操作數(shù)不同,則發(fā)生溢出。

采用雙符號(hào)位

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

a.S1S2=00,表示結(jié)果為正數(shù),無溢出;

b.S1S2=01,表示結(jié)果正溢出;

c.S1S2=10,表示結(jié)果負(fù)溢出;

d.S1S2=11,表示結(jié)果為負(fù)數(shù),無溢出。

用一位符號(hào)位以及數(shù)據(jù)位的進(jìn)位情況判斷溢出

如果符號(hào)位的進(jìn)位Cs與最高數(shù)位的進(jìn)位C1相同,則說明沒有溢出,否則表示發(fā)生溢出。

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

A.商的符號(hào)

B.商的第1位數(shù)值

C.商數(shù)溢出與否

D.無關(guān)

【答案】C

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

三、浮點(diǎn)數(shù)的表示和運(yùn)算

1浮點(diǎn)數(shù)的表示

浮點(diǎn)數(shù)就是將比例因子以適當(dāng)?shù)男问奖硎驹跀?shù)據(jù)中,而且小數(shù)點(diǎn)的位置可以根據(jù)需要進(jìn)行改變。浮點(diǎn)數(shù)的表示方法擴(kuò)大了數(shù)據(jù)的表示范圍。常用的浮點(diǎn)數(shù)表示方法如下:

圖2-2 普通浮點(diǎn)數(shù)表示法

浮點(diǎn)數(shù)表示主要包括兩個(gè)部分階碼部分與數(shù)值部分。階碼由階符與階碼數(shù)值部分組成,數(shù)值部分由數(shù)符與尾數(shù)部分組成。小數(shù)點(diǎn)隱含表示,在尾數(shù)之前。階碼為整數(shù),與階符一起反應(yīng)符點(diǎn)數(shù)的表示范圍,尾數(shù)反應(yīng)浮點(diǎn)數(shù)的精度。

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

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

左規(guī):當(dāng)浮點(diǎn)數(shù)尾數(shù)最高位不為1時(shí)要進(jìn)行規(guī)格化處理,將尾數(shù)左移一位,階碼減1(基數(shù)為2時(shí))的方法稱為左規(guī)。

右規(guī):當(dāng)浮點(diǎn)數(shù)尾數(shù)出現(xiàn)溢出時(shí),將尾數(shù)右移一位,階碼加1(基數(shù)為2時(shí)),這種方法稱為右規(guī)。規(guī)格化浮點(diǎn)數(shù)的尾數(shù)M的絕對(duì)值應(yīng)滿足:1/r≤|M|≤1(r為基數(shù))。

尾數(shù)的基數(shù)為2時(shí),原碼規(guī)格化數(shù)的尾數(shù)最高位一定是1,補(bǔ)碼規(guī)格化數(shù)的尾數(shù)最高位一定與尾數(shù)符號(hào)位相反。基數(shù)不同,浮點(diǎn)數(shù)的規(guī)格化形式也不同。

(2)IEEE754標(biāo)準(zhǔn)

IEEE754標(biāo)準(zhǔn)的常用格式如下:

圖2-3 IEEE754浮點(diǎn)數(shù)表示法

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

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

2浮點(diǎn)數(shù)加減運(yùn)算

浮點(diǎn)數(shù)運(yùn)算時(shí)采用補(bǔ)碼形式,運(yùn)算時(shí)階符運(yùn)算與位數(shù)運(yùn)算分開,先做階符運(yùn)算,在進(jìn)行尾數(shù)運(yùn)算。浮點(diǎn)數(shù)運(yùn)算包括以下幾個(gè)步驟:

(1)對(duì)階

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

(2)尾數(shù)求和

將對(duì)階后的尾數(shù)按定點(diǎn)數(shù)加(減)運(yùn)算規(guī)則運(yùn)算。

(3)規(guī)格化

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

(4)舍入處理

在浮點(diǎn)數(shù)的對(duì)階和右規(guī)的過程中,可能會(huì)將尾數(shù)低位丟失,此時(shí)需要采取一些從處理方法降低精度損失。常見的舍入方法有:

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

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

(5)溢出判斷

浮點(diǎn)數(shù)的溢出與否是由階碼的符號(hào)決定的,尾數(shù)溢出浮點(diǎn)數(shù)不一定溢出。使用雙符號(hào)位時(shí),當(dāng)階碼的符號(hào)位為“01”時(shí),即階碼大于最大階碼,表示上溢,此時(shí)會(huì)引發(fā)中斷進(jìn)行處理;當(dāng)階碼的符號(hào)位出現(xiàn)“10”時(shí),即階碼小于最小階碼,表示下溢,按機(jī)器零處理,不會(huì)引起中斷。

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

A.001111100010

B.001110100010

C.010000010001

D.發(fā)生溢出

【答案】D

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

四.算術(shù)邏輯單元(不是重點(diǎn))

1.一位全加器

一位全加器實(shí)現(xiàn)了兩個(gè)一位數(shù)據(jù)的加法,其有加數(shù)A被加數(shù)B下級(jí)進(jìn)位Ci1三個(gè)輸入,有運(yùn)算結(jié)果S與進(jìn)位Ci兩個(gè)輸出。其邏輯表達(dá)式為:

S=A⊕B⊕Ci-1

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

2串行加法器

串行加法器只有一個(gè)全加器,數(shù)據(jù)逐位送入加法器中進(jìn)行運(yùn)算。如果操作數(shù)位長為n,加法就要分n次進(jìn)行,每次產(chǎn)生一位和,結(jié)果串行的送到寄存器中,用觸發(fā)器來保存進(jìn)位信號(hào),并參與下一次計(jì)算。

3并行加法器

用n位全加器實(shí)現(xiàn)兩個(gè)n位操作數(shù)各位同時(shí)相加,這種加法器稱謂并行加法器。并行加法器中全加器的位數(shù)與操作數(shù)的位數(shù)相同。并行加法器從相對(duì)于串行加法器來說速度提升不少。但是并行加法器在進(jìn)位傳遞時(shí)會(huì)產(chǎn)生時(shí)延,并且并行加法器的最長運(yùn)算時(shí)間由此時(shí)延決定。

并行加法器有兩種常用的進(jìn)位方式:

(1)串行進(jìn)位

將n個(gè)全加器串聯(lián),每一個(gè)全加器的進(jìn)位輸入依賴于上一級(jí)的進(jìn)位輸出。采用此種方式,進(jìn)位時(shí)延大,但是全加器結(jié)構(gòu)簡單。

(2)并行進(jìn)位

將各級(jí)全加器的進(jìn)位信號(hào)同時(shí)作為全加器的輸入,同時(shí)形成進(jìn)位信號(hào)。采用并行進(jìn)位方式提高了全加器的運(yùn)行速度,相對(duì)應(yīng)的硬件成本也增加。

4ALU邏輯算術(shù)單元

ALU是一種組合邏輯電路,它能進(jìn)行多種算術(shù)運(yùn)算和邏輯運(yùn)算。ALU的核心是一個(gè)并行加法器,通過此加法器可以完成加減乘除等算術(shù)運(yùn)算。同時(shí)ALU也能執(zhí)行“與”“或”“非”等邏輯運(yùn)算。ALU通過函數(shù)發(fā)生器產(chǎn)生不同信號(hào),以完成不同操作。其結(jié)構(gòu)如下圖所示。

圖2-4 算術(shù)邏輯單元

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

推薦閱讀
  1. 2020年英語專業(yè)考研基礎(chǔ)英語閱讀理解高分特訓(xùn)100篇
  2. 馮慶華《漢英翻譯基礎(chǔ)教程》筆記和課后習(xí)題(含考研真題)詳解
  3. 何曼君《高分子物理》(第3版)筆記和課后習(xí)題(含考研真題)詳解
  4. 2014年國際貨運(yùn)代理專業(yè)英語精裝版講義(含英文翻譯和真題詳解)
  5. 華中農(nóng)業(yè)大學(xué)文法學(xué)院437社會(huì)工作實(shí)務(wù)[專業(yè)碩士]歷年考研真題及詳解
  6. 任保平《宏觀經(jīng)濟(jì)學(xué)》課后習(xí)題詳解
  7. 曼昆《經(jīng)濟(jì)學(xué)原理(微觀經(jīng)濟(jì)學(xué)分冊(cè))》配套題庫【課后習(xí)題+章節(jié)題庫(含名校考研真題)+模擬試題】
  8. 全國會(huì)計(jì)從業(yè)資格考試《會(huì)計(jì)電算化》【教材精講+真題解析】講義與視頻課程【20小時(shí)高清視頻】
  9. 2016年考研政治速背15天
  10. 南京航空航天大學(xué)外國語學(xué)院211翻譯碩士英語[專業(yè)碩士]歷年考研真題及詳解
  11. 平狄克《微觀經(jīng)濟(jì)學(xué)》(第8版)名校考研真題詳解
  12. 云南大學(xué)經(jīng)濟(jì)學(xué)院434國際商務(wù)專業(yè)基礎(chǔ)[專業(yè)碩士]歷年考研真題及詳解
  13. 華中師范大學(xué)333教育綜合[專業(yè)碩士]歷年考研真題及詳解【部分視頻講解】
  14. 華中師范大學(xué)等六校合編《分析化學(xué)》(第4版)(下冊(cè))筆記和課后習(xí)題(含考研真題)詳解
  15. 張幼文《世界經(jīng)濟(jì)學(xué)—原理與方法》筆記和習(xí)題詳解
主站蜘蛛池模板: 江安县| 余江县| 通榆县| 卢氏县| 洛隆县| 平塘县| 大方县| 梓潼县| 大邑县| 上蔡县| 五大连池市| 内江市| 府谷县| 揭西县| 高淳县| 广安市| 连城县| 湾仔区| 横峰县| 峨山| 柘城县| 辽阳市| 刚察县| 连城县| 炎陵县| 衡阳市| 深水埗区| 会昌县| 南靖县| 新津县| 加查县| 阿克苏市| 邮箱| 新田县| 肇东市| 秦安县| 滕州市| 岳普湖县| 丰城市| 巴彦县| 仁寿县|