計(jì)算機(jī)原理-課件(2)_第1頁
計(jì)算機(jī)原理-課件(2)_第2頁
計(jì)算機(jī)原理-課件(2)_第3頁
計(jì)算機(jī)原理-課件(2)_第4頁
計(jì)算機(jī)原理-課件(2)_第5頁
已閱讀5頁,還剩132頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第2章 計(jì)算機(jī)中數(shù)據(jù)的表示2.1 進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換2.2 定點(diǎn)數(shù)的表示2.3 浮點(diǎn)數(shù)的表示2.4 非數(shù)值數(shù)據(jù)的表示2.5 數(shù)據(jù)校驗(yàn)碼關(guān)聯(lián)習(xí)題 2.1 進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換2.1.1 進(jìn)位計(jì)數(shù)制進(jìn)位計(jì)數(shù)制是一種按進(jìn)位進(jìn)行計(jì)數(shù)的制式。在日常工作與生活中,我們習(xí)慣使用十進(jìn)制數(shù),而計(jì)算機(jī)內(nèi)部只能識別二進(jìn)制數(shù),但在程序設(shè)計(jì)時,數(shù)據(jù)往往用十進(jìn)制數(shù)或十六進(jìn)制數(shù)表示,而很少用二進(jìn)制數(shù),因?yàn)橛枚M(jìn)制數(shù)表示數(shù)據(jù)或地址時,位數(shù)太長,書寫不方便,易出錯。進(jìn)位計(jì)數(shù)制具有以下兩方面特征: 基數(shù)R(Radix):是指進(jìn)制數(shù)中數(shù)碼所允許取值的個數(shù),且計(jì)數(shù)規(guī)則是“逢R進(jìn)一”。 位權(quán)W(Weight):是指基數(shù)R的i次冪

2、(Ri),表示進(jìn)制數(shù)中第i位的位權(quán)。 1十進(jìn)制數(shù)(Decimal)十進(jìn)制數(shù)是我們?nèi)粘9ぷ魃钪凶畛S玫臄?shù),數(shù)中的任一數(shù)碼di0,1,2,9,因此十進(jìn)制數(shù)的基數(shù)為10,且逢十進(jìn)一;十進(jìn)制數(shù)的位權(quán)為10i。任何一個十進(jìn)制數(shù)都可以按下式寫成一個按權(quán)展開的多項(xiàng)式和的形式: D=dndn-1d1d0.d-1d-m =dn10n+dn-110n-1+d1101+d0100+d-110-1 +d-m10-m=di10i (2-1) 十進(jìn)制數(shù)的后綴為D,可省略。如78D、179.26D可寫做78、179.26。2二進(jìn)制數(shù)(Binary)二進(jìn)制數(shù)中的任一數(shù)碼bi0,1,因此二進(jìn)制數(shù)的基數(shù)為2,且逢二進(jìn)一;二進(jìn)制

3、數(shù)的位權(quán)為2i。任何一個二進(jìn)制數(shù)都可以按下式寫成一個按權(quán)展開的多項(xiàng)式和的形式: B=bnbn-1b1b0.b-1b-m =bn2n+bn-12n-1+b121+b020+ b-12-1+b-m2-m +b-m2-m = bi2i (2-2) 二進(jìn)制數(shù)的后綴為B,如1001B、10011101.1101B。 3十六進(jìn)制數(shù)(Hexadecimal)十六進(jìn)制數(shù)中的任一數(shù)碼hi0,1,2,9,A,B,C,D,E,F(xiàn),因此十六進(jìn)制數(shù)的基數(shù)為16,且逢十六進(jìn)一;十六進(jìn)制數(shù)的位權(quán)為16i。任何一個十六進(jìn)制數(shù)都可以按下式寫成一個按權(quán)展開的多項(xiàng)式和的形式:H=hnhn-1h1h0.h-1h-m=hn16n+hn

4、-116n-1+ +h1161+h0160+h-116-1+ +h-m16-m =hi16i (2-3) 十六進(jìn)制數(shù)的后綴為H,如23AH、9C78.1B3H等,AF相當(dāng)于十進(jìn)制數(shù)的1015。為了區(qū)分十六進(jìn)制數(shù)和標(biāo)識符(標(biāo)號、變量等),當(dāng)十六進(jìn)制數(shù)首位為AF時,其前必須加“0”,如0F08H、0C57.2H。2.1.2 進(jìn)位計(jì)數(shù)制的相互轉(zhuǎn)換1二進(jìn)制數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換(1) 二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)。直接按式(2-1)展開并求和即可。【例2-1】 將101110.101B轉(zhuǎn)換為十進(jìn)制數(shù)。解:101110.101B=125+024+123+122+121+020+12-1+02-2+12-3=46.

5、625(2) 十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)。十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的方法有兩種:直接法和查表法。直接法:對于整數(shù)部分采用“除2取余法”,直到商為零,而余數(shù)(由低位到高位)即為轉(zhuǎn)換成的二進(jìn)制數(shù)整數(shù)部分;對于小數(shù)部分采用“乘2取整法”,而積的整數(shù)部分(由高位到低位)即為轉(zhuǎn)換成的二進(jìn)制數(shù)小數(shù)部分。最后將轉(zhuǎn)換結(jié)果合起來便得到相應(yīng)的二進(jìn)制數(shù)。【例2-2】 將25.696D轉(zhuǎn)換為二進(jìn)制數(shù)。解:對整數(shù)部分,采用“除2取余法”,計(jì)算如下: 因此 25D=11001B對于小數(shù)部分,采用“乘2取整法”,計(jì)算如下: 因此0.696D0.10110B所以25.696D11001.10110B查表法:利用十進(jìn)制與二進(jìn)制數(shù)對照

6、表,把十進(jìn)制數(shù)分解成2i多項(xiàng)式和的形式,然后查表求得對應(yīng)的二進(jìn)制數(shù)。十進(jìn)制轉(zhuǎn)換為二進(jìn)制數(shù)對應(yīng)關(guān)系如表2-1所示。表2-1 十進(jìn)制數(shù)與2的整次冪之間的對應(yīng)關(guān)系具體方法:把十進(jìn)制數(shù)(整數(shù)和小數(shù))分解成2的整次冪項(xiàng)的和,對于出現(xiàn)2的整次冪項(xiàng)相應(yīng)的位置數(shù)碼取“1”,否則取“0”?!纠?-3】 將133.625D轉(zhuǎn)換為二進(jìn)制數(shù)。解:133.625D=128+4+1+0.5+0.125=27+22+20+2-1+2-3 =10000101.101B2二進(jìn)制數(shù)與十六進(jìn)制數(shù)之間的轉(zhuǎn)換由于四位二進(jìn)制數(shù)的編碼與一位十六進(jìn)制數(shù)的數(shù)碼之間存在著一一對應(yīng)的關(guān)系,如表2-2所示,因此,二進(jìn)制數(shù)與十六進(jìn)制數(shù)之間的轉(zhuǎn)換十分簡

7、單、方便。 表2-2 二進(jìn)制數(shù)與十六進(jìn)制數(shù)之間的對應(yīng)關(guān)系 (1) 二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)。以小數(shù)點(diǎn)為分界線,分別向左、向右按四位進(jìn)行分組,不足四位者,在最前面或最后面補(bǔ)0,使之成為四位,然后,每四位按表2-2的對應(yīng)關(guān)系用一位十六進(jìn)制數(shù)來表示?!纠?-4】 將1111000111.10011B、110110001101B分別轉(zhuǎn)換為十六進(jìn)制數(shù)。解:1111000111.10011B=0011 1100 0111.1001 1000B=3C7.98H110110001101B=1101 1000 1101B=D8DH(2) 十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)。每一位十六進(jìn)制數(shù)按表2-2的對應(yīng)關(guān)系轉(zhuǎn)換成四位的

8、二進(jìn)制數(shù)即可,小數(shù)點(diǎn)位置不變。 【例2-5】 將3F.75H轉(zhuǎn)換為二進(jìn)制數(shù)。解:3F.75H=0011 1111.0111 0101B=111111.01110101B 3十進(jìn)制數(shù)與十六進(jìn)制數(shù)之間的轉(zhuǎn)換(1) 十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)。直接按式(2-3)展開并求和即可?!纠?-6】 將7B9.62H轉(zhuǎn)換為十進(jìn)制數(shù)。解:7B9.3CH=7162+11161+9160+316-1+1216-2=1977.234375D (2) 十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)。采用類似十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的方法,對于整數(shù)部分采用“除16取余法”,直到商為零,而余數(shù)(由低位到高位)即為轉(zhuǎn)換成的十六進(jìn)制數(shù)整數(shù)部分;對于小數(shù)

9、部分采用“乘16取整法”,而積的整數(shù)部分(由高位到低位)即為轉(zhuǎn)換成的十六進(jìn)制數(shù)小數(shù)部分。最后將轉(zhuǎn)換結(jié)果合起來便得到相應(yīng)的十六進(jìn)制數(shù)。這種方法因乘、除16比較復(fù)雜,一般采用下面的間接方法?!纠?-7】 將105.75D轉(zhuǎn)換為十六進(jìn)制數(shù)。解:105.75D=1101001.11B=01101001.1100B=69.CH2.2 定點(diǎn)數(shù)的表示2.2.1 符號的表示計(jì)算機(jī)本身無法識別數(shù)據(jù)的符號,即正號(+)和負(fù)號(-),為了讓計(jì)算機(jī)能夠識別數(shù)的符號,必須用“0”和“1”來表示。因此規(guī)定:數(shù)據(jù)字的最高位為符號位,并且用“0”表示正(+),用“1”表示負(fù)(-)。于是一個數(shù)據(jù)字的書寫形式和機(jī)器內(nèi)的存儲形式存

10、在差異,為了區(qū)別這種不同,我們把書寫形式(正、負(fù)符號加絕對值)的數(shù)據(jù)稱為真值,機(jī)器內(nèi)的存儲形式(符號位加二進(jìn)制數(shù)值)的數(shù)據(jù)稱為機(jī)器數(shù)。一個數(shù)據(jù)的機(jī)器數(shù)究竟采用多少位表示,與機(jī)器的字長有關(guān),若機(jī)器的字長是16位,則表示數(shù)據(jù)的機(jī)器數(shù)也是16位。機(jī)器數(shù)有一定的長度限制,故相應(yīng)的真值便會存在一定的范圍要求,以8位機(jī)為例,8位的機(jī)器數(shù)相應(yīng)的真值范圍為-128+127。 2.2.2 小數(shù)點(diǎn)的表示數(shù)據(jù)中的小數(shù)點(diǎn)在計(jì)算機(jī)中有兩種表示方法,即定點(diǎn)表示法和浮點(diǎn)表示法。1定點(diǎn)表示法定點(diǎn)表示法所表示的數(shù)據(jù)為定點(diǎn)數(shù)。定點(diǎn)數(shù)指小數(shù)點(diǎn)在數(shù)中的位置是固定不變的。因此,計(jì)算機(jī)中數(shù)的小數(shù)點(diǎn)不用表示,或者隱含表示,它不占用存儲空間

11、。下面以16位機(jī)為例來說明定點(diǎn)表示法。1) 定點(diǎn)整數(shù)小數(shù)點(diǎn)被固定在數(shù)值位的最低有效位之后,其格式如下: 2) 定點(diǎn)小數(shù)小數(shù)點(diǎn)被固定在符號位與尾數(shù)之間,其格式如下:定點(diǎn)整數(shù)表示的數(shù)只能是整數(shù),而定點(diǎn)小數(shù)所表示的數(shù)只能是小數(shù)。在本書中,我們更側(cè)重于定點(diǎn)小數(shù)。 2浮點(diǎn)表示法定點(diǎn)表示法難以表示數(shù)值很大或很小的數(shù)據(jù),為了表示更大范圍的數(shù)據(jù),數(shù)學(xué)上通常采用科學(xué)計(jì)數(shù)法,即將數(shù)據(jù)表示成三部分:第一部分表示數(shù)據(jù)的符號;第二部分表示數(shù)據(jù)的有效值;第三部分表示數(shù)據(jù)中的小數(shù)點(diǎn)位置。改變了第三部分的數(shù)值,相當(dāng)于改變了小數(shù)點(diǎn)的位置,這種表示小數(shù)點(diǎn)的方法稱為浮點(diǎn)表示法。浮點(diǎn)表示法所表示的數(shù)據(jù)是浮點(diǎn)數(shù),浮點(diǎn)數(shù)x通常表示為x=

12、 (1)SMRe其中:S(Sign)符號,0表示正(+),1表示負(fù)(-);M(Mantissa)尾數(shù),為定點(diǎn)小數(shù),表示浮點(diǎn)數(shù)x的有效數(shù)字,決定浮點(diǎn)數(shù)的精度;e(exponent)階碼,為定點(diǎn)整數(shù),表示浮點(diǎn)數(shù)x中小數(shù)點(diǎn)的實(shí)際位置,是影響浮點(diǎn)數(shù)大小的主要因素,即它決定了浮點(diǎn)數(shù)的表示范圍;R(Radix)基數(shù),是一個系統(tǒng)中約定的常數(shù),通常取值為2。由于R是一個常數(shù),所以浮點(diǎn)數(shù)在計(jì)算機(jī)中的存儲形式為S、E、M,E是階碼的移碼形式。由此可見,浮點(diǎn)數(shù)的表示又歸結(jié)到定點(diǎn)整數(shù)和定點(diǎn)小數(shù)表示問題。關(guān)于浮點(diǎn)數(shù)的表示更詳細(xì)的內(nèi)容將在2.3節(jié)中討論。 2.2.3 機(jī)器數(shù)形式對于數(shù)據(jù)定點(diǎn)表示的符號問題,計(jì)算機(jī)應(yīng)如何處理

13、符號位?符號位能否同數(shù)值位一樣參加運(yùn)算?為了妥善處理這個問題,下面以n位機(jī)為例,介紹幾種定點(diǎn)數(shù)的機(jī)器數(shù)形式(若機(jī)器數(shù)為n位,其中符號位占1位,數(shù)值位占n-1位,而小數(shù)點(diǎn)隱含)。 1原碼原碼是一種最簡單、最直觀的機(jī)器數(shù)表示形式,它與真值的形式最為接近。1) 原碼的定義設(shè)x為n位的二進(jìn)制數(shù)據(jù),式(2-4)和式(2-5)分別給出了x為定點(diǎn)小數(shù)0.x1x2xn-1和x為定點(diǎn)整數(shù)x1x2xn-1的原碼定義。 定點(diǎn)小數(shù)原碼的定義: x原=0 x+(1-2-(n-1)-(1-2-(n-1)x0(2-4)定點(diǎn)整數(shù)原碼的定義:x原= 0 x+(2n-1-1)-(2n-1-1)x0 (2-5)【例2-8】 已知二

14、進(jìn)制數(shù)的真值x,求x原。 x=+0.0010110 x=-0.0010110 x=+00010110 x=-00010110解:由定義可得 因?yàn)閤0,所以x原= x = 0.0010110 因?yàn)閤0,所以x原= 1-x = 1.0010110 因?yàn)閤0,所以x原= x = 00010110 因?yàn)閤0,所以x原= 27-x = 100101102) 原碼所表示的數(shù)據(jù)大小以n位定點(diǎn)小數(shù)為例,分析原碼所表示的數(shù)據(jù)范圍,如下所示: n位定點(diǎn)正小數(shù)的原碼0.00 0+00.11 1+(1-2-(n-1)n位定點(diǎn)負(fù)小數(shù)的原碼1.00 0-01.11 1-(1-2-(n-1)所以,n位定點(diǎn)小數(shù)的原碼所表示的

15、數(shù)據(jù)范圍為-(1-2-(n-1),+(1-2-(n-1)。0的原碼形式有兩種:+0的原碼為0.00 0,-0的原碼為1.000。3) 原碼的運(yùn)算特點(diǎn)(1) 原碼的移位。原碼移位規(guī)則:符號位保持不變,數(shù)值位進(jìn)行左移或右移,移出后出現(xiàn)的空位進(jìn)行補(bǔ)0。 【例2-9】 已知以下兩個x原,求2x原、x原。 x原 = 0.0101001 x原 = 1.0101001解: 2x原 = 0.1010010 x原 = 0.0010100 2x原 = 1.1010010 x原 = 1.0010100 (2) 原碼的加減運(yùn)算。原碼的加減運(yùn)算較復(fù)雜,它不僅要判斷兩個數(shù)的符號,確定是進(jìn)行加法還是進(jìn)行減法運(yùn)算,還要比較兩

16、個數(shù)的絕對值大小來決定運(yùn)算結(jié)果的符號??梢?,原碼不便于進(jìn)行加減運(yùn)算,對原碼進(jìn)行符號位處理的硬件較復(fù)雜。為了簡化運(yùn)算,人們提出了機(jī)器數(shù)的補(bǔ)碼形式,從此,不再分別處理符號位和數(shù)值位,而把符號位作為數(shù)值的一部分參與運(yùn)算,并能將減法運(yùn)算轉(zhuǎn)換成加法運(yùn)算,從而簡化了硬件及結(jié)構(gòu),降低了成本。 2補(bǔ)碼1) 互補(bǔ)數(shù)在計(jì)數(shù)制中,為了簡化計(jì)數(shù),常采用一種計(jì)滿歸零的方法。例如鐘表的計(jì)時,計(jì)滿12歸0,即12點(diǎn)=0點(diǎn),于是有:13點(diǎn)=1點(diǎn),14點(diǎn)=2點(diǎn),23點(diǎn)=11點(diǎn),24點(diǎn)=0點(diǎn)。因此,鐘表是以12為模的計(jì)數(shù)方式,其數(shù)學(xué)表達(dá)式為12=0 (mod 12)對于鐘表的表盤,若時針指向12點(diǎn),順時針方向撥時針8格,即表示的

17、時間為8點(diǎn),而按逆時針方向撥時針4格,表示的時間仍為8點(diǎn),因此,兩種不同方向的撥法其結(jié)果是一樣的,于是,8和-4是模12的互補(bǔ)數(shù),記為-4=8 (mod 12)。對于任意一個數(shù)x,若模為M,則x補(bǔ)可由下式進(jìn)行計(jì)算:x補(bǔ) = M+x (mod M) (2-6) 由式(2-6)可知:(1) 當(dāng)x0時,M+xM,把M丟掉,x補(bǔ)= x,即正數(shù)的補(bǔ)數(shù)等于它本身;(2) 當(dāng)x0時,x補(bǔ)= M+x=M-|x| 即負(fù)數(shù)的補(bǔ)數(shù)等于模與該數(shù)絕對值之差?!纠?-10】 對于二進(jìn)制數(shù)x,求在模M=2的條件下的x補(bǔ)。 x= +0.0101001 x= -0.0101001解: 因?yàn)閤0,所以x補(bǔ) = 2 + x =x

18、= 0.0101001 因?yàn)閤0,所以x補(bǔ) = 2 + x = 2-|x|= 2-0.0101001=1.1010111 2) 補(bǔ)碼的定義補(bǔ)碼實(shí)際上是對模的補(bǔ)數(shù),由于機(jī)器字長的限制,數(shù)據(jù)在計(jì)算機(jī)中的運(yùn)算是有模運(yùn)算。設(shè)x為n位二進(jìn)制數(shù)據(jù),式(2-7)和式(2-8)分別給出了x為定點(diǎn)小數(shù)0.x1x2xn-1和x為定點(diǎn)整數(shù)x1x2xn-1的補(bǔ)碼定義。定點(diǎn)小數(shù)補(bǔ)碼的定義:x補(bǔ)0 x+(1-2- (n-1)-1x0(mod 2) (2-7) 定點(diǎn)整數(shù)補(bǔ)碼的定義:x補(bǔ)0 x2n-1-1-2n-1x0(mod 2n) (2-8)【例2-11】 已知以下x,求x補(bǔ)。 x=+0.0010110 x=-0.001

19、0110 x=+00010110 x=-00010110解:由定義可得因?yàn)閤0,所以x補(bǔ)= x = 0.0010110因?yàn)閤0,所以x補(bǔ)=28+x = 1.1101010因?yàn)閤0,所以x補(bǔ)= x = 00010110因?yàn)閤0,所以x補(bǔ)= 28+x = 11101010 3) 補(bǔ)碼所表示的數(shù)據(jù)大小以n位定點(diǎn)小數(shù)的補(bǔ)碼為例,分析補(bǔ)碼所表示的數(shù)據(jù)范圍,如下所示:所以n位定點(diǎn)小數(shù)的補(bǔ)碼所表示的數(shù)據(jù)范圍為-1,+(1-2-(n-1)。小數(shù)0的補(bǔ)碼形式只有一種:+0補(bǔ)=0.00 0,-0補(bǔ)=2+0. 000=0.00 0。 4) 補(bǔ)碼的運(yùn)算特點(diǎn)(1) x補(bǔ)的移位。補(bǔ)碼的移位規(guī)則:補(bǔ)碼左移時,符號位保持不變

20、,數(shù)值位進(jìn)行左移,最低位出現(xiàn)的空位進(jìn)行補(bǔ)0;補(bǔ)碼右移時,符號位保持不變,數(shù)值位進(jìn)行右移,最高位出現(xiàn)的空位填補(bǔ)符號位。 【例2-12】 已知以下x補(bǔ),求2x補(bǔ)和x補(bǔ)。 x補(bǔ) = 0.0101001 x補(bǔ) = 1.0101001解: 2x補(bǔ)= 0.1010010 x補(bǔ) = 0.0010100 2x補(bǔ)= 1.1010010 x補(bǔ) = 1.0010100在補(bǔ)碼左移過程中,注意不要把高位的數(shù)值位移出,否則將會出錯。例如,將8位定點(diǎn)正小數(shù)補(bǔ)碼x補(bǔ)=0.1010011進(jìn)行左移時,需要將最高數(shù)值位的1移出,如果將1移入符號位,正數(shù)的補(bǔ)碼變成了負(fù)數(shù)的補(bǔ)碼,造成符號出錯;如果將1丟掉,又會失去最高位的有效數(shù)值而導(dǎo)

21、致出錯。同理,對于8位定點(diǎn)負(fù)小數(shù)補(bǔ)碼x補(bǔ)=1.0010011進(jìn)行左移時,也會出現(xiàn)同樣的錯誤。(2) x補(bǔ)與x原的轉(zhuǎn)換。若x0,則x原=x補(bǔ)。若x0,則將x原除符號位以外的各位取反后,再在最低位上加1,即得到x補(bǔ);反之,將x補(bǔ)除符號位以外的各位取反后,再在最低位上加1,即得到x原?!纠?-13】 已知以下x原,求x補(bǔ)。 x原=0.0010110 x原=1.0010110 x原=00010110 x原=10010110解:由定義可得 因?yàn)閤0,所以x補(bǔ)=x原= 0.0010110 因?yàn)閤0,所以x補(bǔ)=1.1101010 因?yàn)閤0,所以x補(bǔ)=x原= 00010110 因?yàn)閤0,所以x補(bǔ)=111010

22、10 從【例2-13】的結(jié)果我們還可以看出以下規(guī)律:當(dāng)x0時,保持原碼的符號位不變,從原碼的最低位開始向高位掃描,在遇到第一個1之后,保持該位1和比它低的各位不變,將其余位取反,即得到x原對應(yīng)的補(bǔ)碼?!纠?-14】 已知以下x補(bǔ),求x原。 x補(bǔ)=0.0010110 x補(bǔ)=1.0010110 x補(bǔ)=00010110 x補(bǔ)=10010110解:由定義可得 因?yàn)閤0,所以x原=x補(bǔ)= 0.0010110 因?yàn)閤0,所以x原=1.1101010 因?yàn)閤0,所以x原=x補(bǔ)= 00010110 因?yàn)閤0,所以x原=11101010(3) x補(bǔ)與-x補(bǔ)的關(guān)系。已知x補(bǔ)求-x補(bǔ)稱為對x補(bǔ)求補(bǔ)或變補(bǔ)。其規(guī)則是:

23、將x補(bǔ)的各位取反(包括符號位),然后在最低位加1,即得到-x補(bǔ);反之亦然?!纠?-15】 已知以下x補(bǔ),求-x補(bǔ)。 x補(bǔ)=0.0010110 x補(bǔ)=1.0010110 x補(bǔ)=00010110 x=10010110解:由定義可得 -x補(bǔ)=1.1101010 -x補(bǔ)=0.1101010 -x補(bǔ)=11101010 -x補(bǔ)=01101010 3反碼反碼實(shí)質(zhì)上是一種特殊的補(bǔ)碼,其特殊性在于反碼的模比補(bǔ)碼的模小2n-1。 1) 反碼的定義設(shè)x為n位的二進(jìn)制數(shù)據(jù),式(2-9)和式(2-10)給出了x為定點(diǎn)小數(shù)0.x1x2xn-1和x為定點(diǎn)整數(shù)x1x2xn-1的反碼定義。定點(diǎn)小數(shù)反碼的定義:0 x+(1-2-

24、(n-1)-(1-2-(n-1)x0 (2-9) 定點(diǎn)整數(shù)反碼的定義:0 x2n-1-1-(2n-1-1)x0(mod (2-2-(n-1) (mod (2n-1) (2-10) 【例2-16】 已知以下x,求x反。 x=+0.0010110 x=-0.0010110 x=+00010110 x=-00010110解:由定義可得 x反=0.0010110 x反=1.1101001 x反=00010110 x反=111010012) 反碼所表示的數(shù)據(jù)大小以n位定點(diǎn)小數(shù)為例,分析反碼所表示的數(shù)據(jù)范圍,如下所示:所以n位定點(diǎn)小數(shù)的反碼所表示的數(shù)據(jù)范圍為-(1-2-(n-1),+(1-2-(n-1)。

25、小數(shù)0的反碼形式有兩種:+0的反碼為0.00 0,-0的反碼為1.11 1。4移碼移碼通常用來表示浮點(diǎn)數(shù)的階碼e。我們知道階碼是整數(shù),若采用定點(diǎn)整數(shù)補(bǔ)碼形式表示,補(bǔ)碼的符號位可以作為數(shù)值位,這樣一來,負(fù)數(shù)補(bǔ)碼的值總大于正數(shù)補(bǔ)碼的值,在進(jìn)行對階時,需要比較兩個浮點(diǎn)數(shù)的階碼大小。因?yàn)楸容^起來不太直觀和方便,因此人們提出了移碼形式。浮點(diǎn)數(shù)階碼e的移碼形式記為“E”。移碼E實(shí)質(zhì)上是將階碼e的真值映射到一個正數(shù)域,這樣移碼E的大小可以直觀地反映出真值的大小,便于比較。若階碼e的真值范圍為-128,+127,則E=128+e,移碼E的范圍是0,255。 1) 移碼的定義設(shè)x為n位的二進(jìn)制數(shù)據(jù),式(2-11

26、)給出了x為定點(diǎn)整數(shù)x1x2xn-1的移碼定義。定點(diǎn)整數(shù)移碼的定義如下:x移=2n-1+x -2n-1x2n-1-1 (2-11)由式(2-11)可知,移碼是把真值x在數(shù)軸上正向平移了2n-1,所以,移碼也稱為增量或余碼。 2) 移碼所表示的數(shù)據(jù)大小對于n位定點(diǎn)整數(shù)的移碼,其表示的數(shù)據(jù)范圍如下所示: 所以,n位定點(diǎn)整數(shù)的移碼所表示的數(shù)據(jù)范圍為0,2n-1,0的移碼形式只有一種,即 100 0。3) 移碼與補(bǔ)碼的關(guān)系(1) 當(dāng)0 x2n-1-1時,因?yàn)閤補(bǔ)=x,x移=2n-1+x,所以x移=2n-1+x補(bǔ);(2) 當(dāng)-2n-1x0時,因?yàn)閤補(bǔ)=2n+x,x移=2n-1+x,所以x移=2n-1+x

27、補(bǔ)-2n=x補(bǔ)-2n-1?!纠?-17】 已知以下二進(jìn)制數(shù)x,求x補(bǔ)和x移。 x = +00101001 x = -00101001解: 因?yàn)閤0,所以x補(bǔ)=00101001 x移=10101001 因?yàn)閤0,所以x補(bǔ)=11010111 x移=01010111 2.3 浮點(diǎn)數(shù)的表示2.3.1 浮點(diǎn)數(shù)的格式由浮點(diǎn)表示法可知,計(jì)算機(jī)中的一個浮點(diǎn)數(shù)由階碼E、尾數(shù)M和符號S三部分組成。其中,E為定點(diǎn)整數(shù)的移碼形式,M為定點(diǎn)小數(shù)的補(bǔ)碼形式,S為數(shù)符。由于這三部分所占的位置和長度不同,浮點(diǎn)數(shù)的格式也不相同,為此,美國IEEE(電氣電子工程師協(xié)會)提出了一個從系統(tǒng)結(jié)構(gòu)角度支持浮點(diǎn)數(shù)的表示方法,稱為IEEE

28、754標(biāo)準(zhǔn),是目前計(jì)算機(jī)普遍采用的標(biāo)準(zhǔn)。 132位單精度浮點(diǎn)數(shù)格式(IEEE 754標(biāo)準(zhǔn))32位單精度浮點(diǎn)數(shù)格式如下所示:其中:S表示數(shù)符,占1位,為0表示“+”,為1表示“-”;E表示階碼e的移碼形式,占8位,包括1位階符和7位數(shù)值,將階碼e的真值平移127便轉(zhuǎn)換成移碼E,即E=127+e,移碼E的取值范圍為1,254,0和255用于表示特殊含義的數(shù)值;M表示尾數(shù),占23位,由于尾數(shù)的規(guī)格化要求,IEEE 754標(biāo)準(zhǔn)約定小數(shù)點(diǎn)左邊隱含一位“1”,從而使尾數(shù)的實(shí)際有效位為24位,即尾數(shù)的有效值為1.M。根據(jù)上述規(guī)定,32位單精度浮點(diǎn)數(shù)所表示的數(shù)值x為x = (-1)S 2E-1271.M(1)

29、 若E=0,且M=0,則x為0;(2) 若E=0,且M0,則x = (-1)S2-1271.M,為非規(guī)格化浮點(diǎn)數(shù);(3) 若1E254,則x = (-1)S2E-1271.M,為規(guī)格化浮點(diǎn)數(shù);(4) 若E=255,且M0,則x為“非數(shù)值”;(5) 若E=255,且M=0,則x = (-1)S。值得注意的是:非規(guī)格化浮點(diǎn)數(shù)和0的尾數(shù)M前的隱含位是“0”,而不是“1”。【例2-18】 將5/32和-69.625表示成IEEE 754單精度浮點(diǎn)數(shù)的格式。解: 5/32=0.00101B=1.01B2-3,按IEEE 754單精度浮點(diǎn)數(shù)的要求,因?yàn)閤0,所以S=0。因?yàn)槲矓?shù)的有效值為1.M,所以M=0

30、1000000000000000000000B。因?yàn)镋=127+e,所以E=127+(-3)=124=01111100B5/32表示成IEEE 754單精度浮點(diǎn)數(shù)的格式如下: 因?yàn)?69.625=-1000101.101B=-1.000101101B26所以S=1,M=00010110100000000000000B,E=127+6=133=10000101B,其浮點(diǎn)數(shù)格式如下: 【例2-19】 將IEEE 754單精度浮點(diǎn)數(shù)42E48000H轉(zhuǎn)換成真值十進(jìn)制數(shù)。解:按IEEE 754定義的單精度浮點(diǎn)數(shù)格式單精度浮點(diǎn)數(shù)42E48000H可表示為 S=1,E=10000101B=133,M=11

31、001001000000000000000B=0.78515625,其浮點(diǎn)數(shù)對應(yīng)的真值為(-1)S 2E-1271.M = (-1)021331271.78515625 =1.7851562526 =114.25264位雙精度浮點(diǎn)數(shù)格式(IEEE 754標(biāo)準(zhǔn))64位雙精度浮點(diǎn)數(shù)格式如下所示:64位雙精度浮點(diǎn)數(shù)所表示的數(shù)值x為x = (-1)S2E-10231.M2.3.2 浮點(diǎn)數(shù)的規(guī)格化浮點(diǎn)數(shù)規(guī)格化的目的在于:一方面為了提高運(yùn)算精度,盡可能占滿尾數(shù)的位數(shù),以保留更多的有效數(shù)字;另一方面保證了浮點(diǎn)數(shù)的唯一性。例如,對于浮點(diǎn)數(shù)0.00101126,因?yàn)?.00101126=0.10110024=0

32、.00000101129=所以同一個數(shù)0.00101126有多種表示,因而無法保證其唯一性。另外,如果規(guī)定尾數(shù)為6位,0.00000101129就成了0.00000129,從而丟掉了有效數(shù)字,降低了數(shù)的精度。對于基數(shù)R為2的浮點(diǎn)數(shù),其規(guī)格化條件是:0.5|M|1。在計(jì)算機(jī)中,浮點(diǎn)數(shù)通常是以規(guī)格化形式存儲和參加運(yùn)算的。如果運(yùn)算結(jié)果出現(xiàn)了非規(guī)格化浮點(diǎn)數(shù),則必須對結(jié)果進(jìn)行規(guī)格化處理。 2.3.3 浮點(diǎn)數(shù)的表示范圍當(dāng)浮點(diǎn)數(shù)的格式被確定后,它所表示的數(shù)據(jù)范圍也就確定了。求浮點(diǎn)數(shù)的表示范圍,實(shí)質(zhì)上是分析出浮點(diǎn)數(shù)所表示的最大數(shù)及最小數(shù)。下面針對基數(shù)R為2的浮點(diǎn)數(shù)(階碼為m+1位(包括1位階符),尾數(shù)為n+1

33、位(包括1位數(shù)符),分別討論不同形式的機(jī)器數(shù)所表示的規(guī)格化和非規(guī)格化的最大數(shù)及最小數(shù)。 1階碼和尾數(shù)均采用原碼表示當(dāng)階碼和尾數(shù)均采用原碼表示時,典型浮點(diǎn)數(shù)的機(jī)器數(shù)和真值如表2-3所示。表2-3 階碼和尾數(shù)均用原碼表示時機(jī)器數(shù)的規(guī)格化和非規(guī)格化最大、最小數(shù)2階碼和尾數(shù)均采用補(bǔ)碼表示階碼和尾數(shù)均采用補(bǔ)碼表示時,典型浮點(diǎn)數(shù)的機(jī)器數(shù)和真值如表2-4所示。 表2-4 階碼和尾數(shù)均用補(bǔ)碼表示時機(jī)器數(shù)的規(guī)格化和非規(guī)格化最大、最小數(shù)3階碼和尾數(shù)分別采用移碼和補(bǔ)碼表示階碼和尾數(shù)分別采用移碼和補(bǔ)碼表示時,典型浮點(diǎn)數(shù)的機(jī)器數(shù)和真值如表2-5所示。 表2-5 階碼用移碼、尾數(shù)用補(bǔ)碼表示時機(jī)器數(shù)的規(guī)格化和非規(guī)格化最大、

34、最小數(shù)2.3.4 浮點(diǎn)數(shù)的機(jī)器零計(jì)算機(jī)在對浮點(diǎn)數(shù)進(jìn)行處理的過程中,首先是判“0”,因?yàn)楫?dāng)一個浮點(diǎn)數(shù)是“0”時,運(yùn)算可以簡化。機(jī)器零是指如果一個浮點(diǎn)數(shù)的尾數(shù)為全0,則不論階碼為何值;或者如果一個浮點(diǎn)數(shù)的階碼小于它所能表示的最小值,則不論其尾數(shù)為何值,計(jì)算機(jī)都會把這種浮點(diǎn)數(shù)當(dāng)做零看待。特別是當(dāng)階碼用移碼表示、尾數(shù)用補(bǔ)碼表示時,如果階碼為它所表示的最小數(shù)-2m(階碼為m位)且尾數(shù)為0時,其階碼的移碼形式全為0,尾數(shù)的補(bǔ)碼形式也全為0,這時的浮點(diǎn)數(shù)的機(jī)器數(shù)形式也全為0,從而有利于簡化機(jī)器的判0電路。 2.4 非數(shù)值數(shù)據(jù)的表示2.4.1 字符與字符串字符和字符串是計(jì)算機(jī)中用得最多的非數(shù)值數(shù)據(jù),人們利用字

35、符和字符串編寫程序、表達(dá)文字及各類信息,以便與計(jì)算機(jī)進(jìn)行交流。為了使計(jì)算機(jī)硬件能夠識別和處理字符,必須對字符按一定規(guī)則用二進(jìn)制進(jìn)行編碼。1ASCII碼ASCII碼(American Standard Code for Information Interchange,美國標(biāo)準(zhǔn)信息交換碼)是目前國際上廣泛使用的字符編碼。ASCII碼為7位二進(jìn)制編碼,可表示128個字符,包括10個數(shù)字字符(09)、52個英文字母(大、小寫各26個)、34個常用符號和32個控制字符(如數(shù)符NUL、回車符CR、換行符LF等)。表2-6所示為ASCII編碼。7位ASCII碼用b6b5b4b3b2b1b0表示,其中b6b5

36、b4為ASCII碼的高3位,是字符所在表中列的編碼;b3b2b1b0為ASCII碼的低4位,是字符所在表中行的編碼。 在計(jì)算機(jī)中,一個字符用一個字節(jié)表示,由于ASCII碼只有7位,因此,表示字符的字節(jié)的最高位b7有以下用法:(1) b7置0,用于表示字符的ASCII碼;(2) b7置1,用于表示漢字的編碼;(3) b7用作奇偶校驗(yàn)位。 表2-6 ASCII 碼 表2字符串字符串是指連續(xù)的一串字符。由于一個字符占一個字節(jié)單元,所以字符串在存儲時要占連續(xù)的多個字節(jié)單元。至于存儲順序不同的機(jī)器可以有不同的規(guī)定,字符串中的字符既可以從低位字節(jié)向高位字節(jié)順序存放,也可以從高位字節(jié)向低位字節(jié)順序存放。 2

37、.4.2 BCD碼與十進(jìn)制數(shù)18421BCD碼BCD(Binary Coded Decimal)碼是對一位十進(jìn)制數(shù)所進(jìn)行的編碼,其目的在于:一方面方便快捷地將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制形式的數(shù)據(jù);另一方面直接實(shí)現(xiàn)對十進(jìn)制數(shù)的運(yùn)算。BCD碼的編碼方法有多種,較常用的有8421BCD碼、2421BCD和余3碼。常見的BCD碼如表2-7所示。 表2-7 常見BCD碼8421BCD碼是4位二進(jìn)制編碼,“8421”是指4個位置的位權(quán)分別為8、4、2、1,有且只有10個編碼。由于4位二進(jìn)制的編碼有且只有16個編碼,所以8421BCD碼與4位的二進(jìn)制編碼之間并不存在一一對應(yīng)的關(guān)系。在對十進(jìn)制數(shù)直接進(jìn)行運(yùn)算時,其結(jié)

38、果可能會出現(xiàn)非8421BCD碼,此時需要及時進(jìn)行加6(0110)修正,否則運(yùn)算的結(jié)果會出錯。另外需要注意的是,BCD碼是對一位十進(jìn)制數(shù)所進(jìn)行的編碼,對于多位十進(jìn)制數(shù),則應(yīng)用多個BCD碼組合起來表示。例如十進(jìn)制數(shù)147,對應(yīng)的8421BCD碼為0001 0100 0111。 2 十進(jìn)制數(shù)1) 非壓縮型十進(jìn)制數(shù)非壓縮型十進(jìn)制數(shù)主要應(yīng)用于顯示、打印等非數(shù)值處理過程中,是將十進(jìn)制數(shù)以字符串的形式進(jìn)行表示,即把十進(jìn)制數(shù)中的每一位數(shù)字以及數(shù)的正、負(fù)符號都當(dāng)一個字符,用一個字節(jié)表示其ASCII碼。根據(jù)數(shù)的符號(+、-)的ASCII碼所存儲的位置不同,非壓縮型十進(jìn)制數(shù)又可分為前分隔非壓縮型十進(jìn)制數(shù)和后嵌入非壓

39、縮型十進(jìn)制數(shù)。(1) 前分隔非壓縮型十進(jìn)制數(shù)。前分隔非壓縮型十進(jìn)制數(shù)的表示方法是:數(shù)的符號占一個字節(jié),正號“+”的ASCII碼為2BH,負(fù)號“-”的ASCII碼為2DH,位于十進(jìn)制數(shù)的數(shù)字位之前。 【例2-20】 采用前分隔非壓縮型十進(jìn)制數(shù),寫出十進(jìn)制數(shù)+256和-1716在內(nèi)存的存儲形式。解:+256在內(nèi)存的存儲形式如下: 十進(jìn)制數(shù)+256在內(nèi)存中共占4個字節(jié)單元。-1716在內(nèi)存的存儲形式如下: 十進(jìn)制數(shù)-1716在內(nèi)存中共占5個字節(jié)單元。(2) 后嵌入非壓縮型十進(jìn)制數(shù)。后嵌入非壓縮型十進(jìn)制數(shù)的表示方法是:數(shù)的符號不單獨(dú)占一個字節(jié),而是嵌入到最低位數(shù)字的編碼中。其嵌入規(guī)則是:若數(shù)的符號為正

40、號“+”,則最低位數(shù)字的ASCII碼保持不變;若數(shù)的符號為負(fù)號“-”,則最低位數(shù)字的ASCII碼加上40H?!纠?-21】 采用后嵌入非壓縮型十進(jìn)制數(shù),寫出十進(jìn)制數(shù)+256和-1716在內(nèi)存的存儲形式。解:+256在內(nèi)存的存儲形式如下: 十進(jìn)制數(shù)+256在內(nèi)存中共占3個字節(jié)單元-1716在內(nèi)存的存儲形式如下: 十進(jìn)制數(shù)-1716在內(nèi)存中共占4個字節(jié)單元。2) 壓縮型十進(jìn)制數(shù)壓縮型十進(jìn)制數(shù)既能節(jié)省存儲空間,又便于直接進(jìn)行十進(jìn)制運(yùn)算,是被廣泛采用的十進(jìn)制數(shù)表示方法。此方法是用一個字節(jié)存放兩位十進(jìn)制數(shù)的BCD碼,數(shù)的符號(+、-)占半個字節(jié),并存放在最低位數(shù)字的BCD碼之后。數(shù)的符號所占的半個字節(jié)規(guī)

41、定為:“1100”表示正號(+),“1101”表示負(fù)號(-)。為了保證此表示方法不會出現(xiàn)只有半個字節(jié)的情況,規(guī)定壓縮型十進(jìn)制數(shù)數(shù)字個數(shù)和1位符號之和必須是偶數(shù),否則,在最高位數(shù)字之前補(bǔ)一個數(shù)字0。【例2-22】 采用壓縮型十進(jìn)制數(shù),寫出十進(jìn)制數(shù)+256和-1716在內(nèi)存的存儲形式。解:+256在內(nèi)存的存儲形式如下: 十進(jìn)制數(shù)+256在內(nèi)存中共占2個字節(jié)單元。-1716在內(nèi)存的存儲形式如下:十進(jìn)制數(shù)-1716在內(nèi)存中共占3個字節(jié)單元。2.5 數(shù)據(jù)校驗(yàn)碼數(shù)據(jù)在存儲和傳送的過程中,難免出現(xiàn)錯誤。為了減少和避免錯誤的發(fā)生,一方面從硬件方面采取措施,提高硬件本身的抗干擾能力和可靠性;另一方面在數(shù)據(jù)編碼上

42、采取檢錯糾錯的措施,使得機(jī)器能夠自動發(fā)現(xiàn)錯誤,甚至能糾正錯誤。我們把這種具有檢測錯誤或帶有自動糾錯能力的數(shù)據(jù)編碼稱為數(shù)據(jù)校驗(yàn)碼。其原理是在數(shù)據(jù)中加入一些校驗(yàn)位,組成數(shù)據(jù)校驗(yàn)碼,通過檢查數(shù)據(jù)校驗(yàn)碼的合法性來判斷是否出錯或進(jìn)行糾錯。常用的數(shù)據(jù)校驗(yàn)碼有奇偶校驗(yàn)碼、海明校驗(yàn)碼和循環(huán)冗余校驗(yàn)碼(CRC)等。 2.5.1 奇偶校驗(yàn)碼奇偶校驗(yàn)碼是一種最簡單、最常用的校驗(yàn)碼,被廣泛應(yīng)用于內(nèi)存的讀寫校驗(yàn)和串行通信。1奇偶校驗(yàn)碼的編碼對于n位二進(jìn)制數(shù)D=dn-1dn-2d1d0,添加一位校驗(yàn)位P,P的位置可以在數(shù)據(jù)D的最高位dn-1之前,也可以在數(shù)據(jù)D的最低位d0之后,并且P是數(shù)據(jù)D的函數(shù),即P=f(D)。于是,

43、n位數(shù)據(jù)D和1位校驗(yàn)位P便構(gòu)成了一個n+1位的奇偶校驗(yàn)碼。奇偶校驗(yàn)碼根據(jù)PD之間的函數(shù)不同,可分為偶校驗(yàn)和奇校驗(yàn)。(1) 偶校驗(yàn)(Even):加入一位校驗(yàn)位PEven后,使得n+1位的奇偶校驗(yàn)碼中“1”的個數(shù)為偶數(shù),因此,PEven=dn-1dn-2d1d0。(2) 奇校驗(yàn)(Odd):加入一位校驗(yàn)位POdd后,使得n+1位的奇偶校驗(yàn)碼中“1”的個數(shù)為奇數(shù),因此,POdd= 。2奇偶校驗(yàn)碼的校驗(yàn)發(fā)送端將一個奇偶校驗(yàn)碼發(fā)送后,接收端需要對接收到信息進(jìn)行校驗(yàn),判斷所接收到的數(shù)據(jù)是否有誤,以決定其取舍。具體校驗(yàn)方法為:如果接收端接收到一個1的個數(shù)為偶數(shù)的奇校驗(yàn)碼,或接收端接收到一個1的個數(shù)為奇數(shù)的偶校

44、驗(yàn)碼,則表示接收端所接收的是一個有錯的校驗(yàn)碼。通過設(shè)置出錯標(biāo)志E(E=0,表示無誤;E=1,表示有誤)很容易實(shí)現(xiàn)校驗(yàn)。(1) 偶校驗(yàn)的出錯標(biāo)志EEven:EEven= dn-1dn-2d1d0PEven。(2) 奇校驗(yàn)的出錯標(biāo)志EOdd:E Odd= dn-1dn-2d1d0POdd。 3奇偶校驗(yàn)碼的糾錯能力根據(jù)奇偶校驗(yàn)碼的校驗(yàn),可知奇偶校驗(yàn)碼只能發(fā)現(xiàn)一位出錯或奇數(shù)位同時出錯,至于出錯的位置,則是無法確定的,因此,且奇偶校驗(yàn)碼無法實(shí)現(xiàn)糾錯功能。盡管如此,由于一位出錯的概率遠(yuǎn)遠(yuǎn)高于多位同時出錯的概率,奇偶校驗(yàn)碼能夠滿足一般可靠性的要求,因此,奇偶校驗(yàn)碼一種最簡單、最常用的數(shù)據(jù)校驗(yàn)碼,它被廣泛應(yīng)用

45、于對存儲器中數(shù)據(jù)的檢查或傳送數(shù)據(jù)的檢查。 2.5.2 海明校驗(yàn)碼海明校驗(yàn)碼是由Richard Hamming于1950年提出的,目前仍被廣泛應(yīng)用。它是在奇偶校驗(yàn)的基礎(chǔ)上,通過合理增加校驗(yàn)位的位數(shù)來組成海明校驗(yàn)碼的。它不僅能夠?qū)崿F(xiàn)發(fā)現(xiàn)多位出錯,而且能夠?qū)σ晃怀鲥e進(jìn)行自動糾正。1海明校驗(yàn)碼中校驗(yàn)位的位數(shù)設(shè)數(shù)據(jù)的位數(shù)為n,校驗(yàn)位的位數(shù)為k,則組成的海明校驗(yàn)碼為n+k位。校驗(yàn)時,k位校驗(yàn)位的編碼共有2k種狀態(tài),其中只有一種狀態(tài)用來表示數(shù)據(jù)無誤,其余2k-1種狀態(tài)用來表示數(shù)據(jù)有措。由于海明校驗(yàn)碼共n+k位,所以校驗(yàn)位的位數(shù)k與數(shù)據(jù)的位數(shù)n應(yīng)滿足:2k-1n+k (2-12)根據(jù)式(2-12)可計(jì)算出具有

46、檢測一位出錯并能糾正一位錯誤能力的海明校驗(yàn)碼中k與n的具體對應(yīng)關(guān)系,如表2-8所示。表2-8 海明校驗(yàn)碼中校驗(yàn)位的位數(shù)k與數(shù)據(jù)的位數(shù)n的關(guān)系2海明校驗(yàn)碼的編碼設(shè)n位的數(shù)據(jù)為Dn-1D1D0,k位的校驗(yàn)位為Pk-1P1P0,組成的海明校驗(yàn)碼為HmHm-1H1,其中m=n+k,海明校驗(yàn)碼的編碼規(guī)則如下:(1) 校驗(yàn)位Pi在海明校驗(yàn)碼HmHm-1H1中的位置。每一個校驗(yàn)位Pi在海明校驗(yàn)碼中被安置在位號為2i的位置(i0,1,k-1),校驗(yàn)位Pk-1可能不滿足這個關(guān)系,將其安置在海明校驗(yàn)碼的最高位。其余各位為數(shù)據(jù)位,并按從低位到高位依次排列。 (2) 海明校驗(yàn)碼HmHm-1H1的校驗(yàn)。海明校驗(yàn)碼HmH

47、m-1H1中的每一位Hj是由多個校驗(yàn)位Pi來校驗(yàn)的(i0,1,k-1),其關(guān)系是被校驗(yàn)的每一位位號j等于校驗(yàn)它的各個校驗(yàn)位的位號之和。(3) 校驗(yàn)位Pi的形成。根據(jù)規(guī)則(2),找出校驗(yàn)位Pi參與了對哪些數(shù)據(jù)位的校驗(yàn);反過來,被校驗(yàn)的這些數(shù)據(jù)位按照奇偶校驗(yàn)原理形成校驗(yàn)位Pi。下面以一個字節(jié)的數(shù)據(jù)為例來討論海明校驗(yàn)碼。由于數(shù)據(jù)為8位,即n=8,按式(2-12)可求出校驗(yàn)位的位數(shù)k=5,海明校驗(yàn)碼的總位數(shù)為13位,表示為H13H12H1。按規(guī)則(1),可知海明校驗(yàn)碼為P4D7D6D5D4P3D3D2D1P2D0P1P0。按規(guī)則(2),可以得到表2-9所示的結(jié)果。 表2-9 海明校驗(yàn)碼與校驗(yàn)位的關(guān)系按

48、規(guī)則(3),可以將形成校驗(yàn)位Pi的數(shù)據(jù)位進(jìn)行分組,即校驗(yàn)組的分組。如果需要區(qū)分是兩位出錯還是一位出錯,可以補(bǔ)充一個總校驗(yàn)位P4,則P0:D0,D1,D3,D4,D6P1:D0,D2,D3,D5,D6P2:D1,D2,D3,D7P3:D4,D5,D6,D7P4:D0,D1,D2,D3,D4,D5,D6,D7,P0,P1,P2,P3若采用偶校驗(yàn),則各個校驗(yàn)位的形成方法如下:P0=D0D1D3D4D6P1=D0D2D3D5D6P2=D1D2D3D7P3=D4D5D6D7P4=D0D1D2D3D4D5D6D7P0P1P2P33海明校驗(yàn)碼的校驗(yàn)在接收端收到海明校驗(yàn)碼后,需對k個校驗(yàn)位分別進(jìn)行k組奇偶校驗(yàn)

49、,以判斷數(shù)據(jù)傳輸是否出錯。分組校驗(yàn)后,校驗(yàn)結(jié)果形成k位的狀態(tài)字Sk-1S1S0,若狀態(tài)字Sk-1S1S0全0,則表示數(shù)據(jù)傳輸無誤;否則,表示數(shù)據(jù)傳輸有誤,狀態(tài)字Sk-1S1S0所對應(yīng)的十進(jìn)制數(shù)值就是出錯位的位號,將該位取反,即可實(shí)現(xiàn)糾錯。下面以一個字節(jié)數(shù)據(jù)的海明校驗(yàn)碼為例來說明校驗(yàn)過程。校驗(yàn)時按偶校驗(yàn),狀態(tài)字S4S3S2S1S0的形成如下: S0= P0D0D1D3D4D6S1= P1D0D2D3D5D6S2= P2D1D2D3D7S3= P3D4D5D6D7S4= P4D0D1D2D3D4D5D6D7P0P1P2P3狀態(tài)字S4S3S2S1S0能夠反映13位海明校驗(yàn)碼的出錯情況。當(dāng)錯誤個數(shù)為偶

50、數(shù)時,S4為0;當(dāng)錯誤個數(shù)為奇數(shù)時,S4為1。以此可以判斷是一位出錯還是兩位出錯。 2.5.3 循環(huán)冗余校驗(yàn)碼 在一位出錯概率遠(yuǎn)遠(yuǎn)大于多位同時出錯概率的情況下,奇偶校驗(yàn)是一種簡單而有效的檢查方法,但在串行通信中,常常會遇到瞬間干擾,造成多位數(shù)據(jù)同時發(fā)生錯誤,此時,使用奇偶校驗(yàn)碼意義不大,通常采用循環(huán)冗余校驗(yàn)碼,即CRC(Cyclic Redundancy Check)碼。它是一種具有很強(qiáng)檢錯糾錯能力的校驗(yàn)碼。1循環(huán)冗余校驗(yàn)思想用n位數(shù)據(jù)dn-1d1d0構(gòu)成一個x的n-1次冪的多項(xiàng)式為M(x),即M(x)= dn-1xn-1+dn-2 xn-2+d1x1+d0,再用一個約定的多項(xiàng)式G(x)去除M

51、(x),可得以下關(guān)系式: (2-13) 其中,Q(x)為商數(shù),R(x)為余數(shù)。由式(2-13)可得:M(x)-R(x)=Q(x)G(x) (2-14) 發(fā)送端將M(x)-R(x)作為校驗(yàn)碼進(jìn)行發(fā)送,接收端收到校驗(yàn)碼后,用雙方約定的多項(xiàng)式G(x)去除,如果能夠被整除,即余數(shù)為0,則表示數(shù)據(jù)傳輸無誤,否則表示數(shù)據(jù)傳輸有誤。 2模2運(yùn)算由式(2-14)可知,M(x)-R(x)是減法運(yùn)算,需要涉及到借位,難以用簡單的拼裝方法實(shí)現(xiàn)編碼,為了回避借位運(yùn)算,CRC碼采用了模2運(yùn)算。所謂模2運(yùn)算,是指以按位模2加運(yùn)算為基礎(chǔ)的二進(jìn)制四則運(yùn)算。簡單地講,模2運(yùn)算是一種不考慮進(jìn)位和借位的運(yùn)算。1) 模2加減模2加減

52、是按異或規(guī)則實(shí)現(xiàn)按位加,不進(jìn)位。其運(yùn)算規(guī)則是:00=0,01=1,10=1,11=0 【例2-23】 按模2加減規(guī)則,計(jì)算1101+1011和1101-1011。解:根據(jù)模2加減規(guī)則可得 1101+1011=0110 1101-1011=0110由此可見,模2的加法運(yùn)算等于模2的減法運(yùn)算。2) 模2乘模2乘就是在進(jìn)行乘法運(yùn)算時,按模2加的運(yùn)算規(guī)則,對各個位積進(jìn)行模2加法。例如10101011=1001110。3) 模2除模2除就是在進(jìn)行除法運(yùn)算時,按模2減的運(yùn)算求部分余數(shù),計(jì)算時不進(jìn)行借位。例如10110011101=1100,余數(shù)為101。 3CRC碼的編碼用n位數(shù)據(jù)dn-1d1d0構(gòu)成一個

53、x的n-1次冪的多項(xiàng)式為M(x),即M(x)=dn-1xn-1+dn-2xn-2+d1x1+d0,約定一個生成多項(xiàng)式G(x)為x的k+1次冪的多項(xiàng)式,即G(x)=Ckxk+Ck-1xk-1+C1x1+C0,G(x)作為除數(shù)的余數(shù)多項(xiàng)式R(x)最高次冪為xk-1,因此R(x)相當(dāng)于k位余數(shù)形成的多項(xiàng)式。把k位余數(shù)拼接在n位數(shù)據(jù)位之后,便構(gòu)成n+k位的CRC碼。CRC碼的編碼只是簡單地拼接,關(guān)鍵是如何根據(jù)數(shù)據(jù)去產(chǎn)生k位余數(shù)。由于n位數(shù)據(jù)位后附加了k位余數(shù),n位數(shù)據(jù)構(gòu)成一個x的n-1次冪的多項(xiàng)式M(x)相當(dāng)于提高了xk-1階,即M(x)xk-1。然后按模2除法,用M(x)xk-1除以G(x),便得到

54、余數(shù)多項(xiàng)式R(x),該多項(xiàng)式中x的各個次冪的系數(shù)就是k位余數(shù)。 (2-15) 由式(2-15)可得M(x)xk-1-R(x)=Q(x)G(x)根據(jù)模2加減運(yùn)算規(guī)則可得M(x)xk-1+R(x)=Q(x)G(x) (2-16)【例2-24】 設(shè)生成多項(xiàng)式G(x)=x3+x1+1,求4位數(shù)據(jù)1101的CRC碼。解:因?yàn)镚(x)=x3+x1+1,是4位的多項(xiàng)式,所以余數(shù)是3位。根據(jù)式(2-16)可得3位的余數(shù)為101,因此4位數(shù)據(jù)1101的CRC碼為1101101。在CRC碼中,由n位數(shù)據(jù)和k位校驗(yàn)構(gòu)成的n+k位的CRC碼,也稱為(n+k,n)碼。在例2-24中,由于n=4,n+k=7,故稱(7,4

55、)碼。 4CRC碼的校驗(yàn)接收端收到CRC碼后,用雙方約定的生成多項(xiàng)式G(x)做模2除,如果除得的余數(shù)為0,則表示接收到的信息中沒有錯誤;否則表示接收到的信息中某一位發(fā)生錯誤。出錯的位置不同,相應(yīng)的余數(shù)也不同,因此,可以根據(jù)余數(shù)來確定出錯的位置,進(jìn)而實(shí)現(xiàn)糾錯功能。在例2-24中,4位數(shù)據(jù)1101(7,4)碼的出錯情況如表2-10所示。 表2-10 4位數(shù)據(jù)1101基于G(x)=x3+x1+1(7,4)碼的校驗(yàn)以表2-10中的第二行為例,對余數(shù)001補(bǔ)0后再除以G(x),得到的第二次余數(shù)為010,第二次余數(shù)為010再補(bǔ)0后除以G(x),得到的第三次余數(shù)為100,按此繼續(xù)做除法,不難發(fā)現(xiàn)所得的余數(shù)依

56、次為011、110、111、101,最后又回到001,這就是為什么將此校驗(yàn)碼稱之為循環(huán)校驗(yàn)碼的原因。根據(jù)循環(huán)碼的這一特點(diǎn),當(dāng)接收端收到CRC碼與生成多項(xiàng)式G(x)做模2除得到的余數(shù)不為0時,可以一邊對余數(shù)補(bǔ)0繼續(xù)做模2除,同時使被檢測的CRC碼循環(huán)左移,當(dāng)出現(xiàn)的余數(shù)為101時,原來出錯的位已移到F7的位置,將其取反進(jìn)行糾錯后,在下次移位時送回F1,將CRC碼繼續(xù)循環(huán)左移,移滿一個循環(huán)后,可得到一個糾錯后的CRC碼。例如,若接收端收到CRC碼字為1010111,用G(x)=x3+x1+1做模2除,得到的余數(shù)為100,說明接收到的信息中某一位發(fā)生錯誤。將此余數(shù)補(bǔ)0后再除以G(x),同時使CRC碼循

57、環(huán)左移。進(jìn)行如此運(yùn)算4次后,得到的余數(shù)為101,此時,CRC碼也循環(huán)左移了4位,變成了1111010。出錯位已移至F7,將其取反可得0111010。再將它循環(huán)左移3位,補(bǔ)足7次(一個循環(huán)),出錯位又回到F3,便得到一個正確的碼字1010011。5生成多項(xiàng)式G(x)由前面的內(nèi)容可知,在CRC碼的形成和校驗(yàn)過程中,生成多項(xiàng)式G(x)起著非常重要的作用。采用的生成多項(xiàng)式G(x)不同,所形成的CRC碼字和碼距不同,其檢錯和糾錯能力也不同。并非任何一個x的k+1冪的多項(xiàng)式都可以作為生成多項(xiàng)式,它應(yīng)滿足以下要求:(1) 任何一位發(fā)生錯誤都應(yīng)使余數(shù)不為0;(2) 不同位發(fā)生錯誤時,其余數(shù)應(yīng)不同;(3) 對余

58、數(shù)做模2除,應(yīng)能使余數(shù)循環(huán)。 為便于選擇滿足以上要求的生成多項(xiàng)式G(x),表2-11列出了常用的生成多項(xiàng)式。在數(shù)據(jù)通信與網(wǎng)絡(luò)中,由于數(shù)據(jù)位數(shù)多,上千位二進(jìn)制數(shù)據(jù)位構(gòu)成一幀,為檢測信息傳輸?shù)恼_與錯誤,廣泛采用CRC碼進(jìn)行校驗(yàn)。這時所使用的生成多項(xiàng)式的冪比較高,常用的生成多項(xiàng)式有:G(x)=x16+x15+x2+1G(x)=x16+x12+x5+1G(x)=x32+x26+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 表2-11 常用的生成多項(xiàng)式G(x)關(guān) 聯(lián) 習(xí) 題 2.1 數(shù)制轉(zhuǎn)換。(1) 213=( )B=( )H(2) 0F8EH=( )B=( )D(3)

59、 69.75=( )B=( )H(4) 10111011B =( )D=( )H(5) 110000010.0101 B = ( )D =( )H2.2 設(shè)機(jī)器字長為8位(含一位符號位),分別求出x原、x反、x移、x補(bǔ)、-x補(bǔ)、x補(bǔ)。(1) x=+119 (2) x=-56 (3) x=-1 (4) x=+25/128 (5) -37/64 2.3 已知x的二進(jìn)制真值,試求x補(bǔ)、-x補(bǔ)、x補(bǔ)、x補(bǔ)、2x補(bǔ)、4x補(bǔ)、-2x補(bǔ)、-x補(bǔ)。(1) x=+0.0101101 (2) x=-0.0001011 (3) x=-1 2.4 已知x補(bǔ),求x的真值。(1) x補(bǔ)=0.1010111 (2) x補(bǔ)=

60、1.1110010 (3) x補(bǔ)=0.0101101 (4) x補(bǔ)=1.11111112.5 設(shè)十進(jìn)制數(shù)x=(+124.625)2-10。(1) 寫出x對應(yīng)的二進(jìn)制定點(diǎn)小數(shù)表示形式。(2) 若機(jī)器的浮點(diǎn)數(shù)表示格式如下:其中,階碼和尾數(shù)的基數(shù)均為2。 寫出階碼和尾數(shù)均采用原碼表示時的機(jī)器數(shù)形式。 寫出階碼和尾數(shù)均采用補(bǔ)碼表示時的機(jī)器數(shù)形式。 2.6 設(shè)某機(jī)器數(shù)的字長為16位,數(shù)據(jù)表示格式如下所示。定點(diǎn)數(shù):浮點(diǎn)數(shù):分別寫出下列數(shù)據(jù)表示形式中所能表示的最小正數(shù)、最大正數(shù)、最大負(fù)數(shù)、最小負(fù)數(shù)(絕對值最大的負(fù)數(shù))以及浮點(diǎn)規(guī)格化最小正數(shù)、最大負(fù)數(shù)所對應(yīng)的十進(jìn)制真值。 (1) 原碼表示的定點(diǎn)整數(shù);(2) 補(bǔ)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論