計算機中的數(shù)與編碼_第1頁
計算機中的數(shù)與編碼_第2頁
計算機中的數(shù)與編碼_第3頁
計算機中的數(shù)與編碼_第4頁
計算機中的數(shù)與編碼_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

微機原理及應用第一章計算機中的數(shù)與編碼1/11/202411.1數(shù)制與轉(zhuǎn)換1.2有符號二進制數(shù)的表示方法及溢出問題1.3定點數(shù)和浮點數(shù)

1.4二進制編碼的十進制數(shù)(BCD編碼)

1.5ASCII字符代碼1.6漢字編碼第一章計算機中的數(shù)與編碼返回主目錄1/11/20242第一章計算機中的數(shù)與編碼計算機的最根本功能是進行數(shù)據(jù)的計算和處理加工。數(shù)在計算機中是以器件的物理狀態(tài)來表示的。為了方便和可靠,在計算機中采用了二進制數(shù)字系統(tǒng),即計算機中要處理的所有數(shù)據(jù),都要用二進制數(shù)字系統(tǒng)來表示,所有的字母、符號、漢字也都要用二進制編碼〔不是普通意義所理解的“數(shù)〞〕來表示。在本章中,我們將介紹計算機中數(shù)制和碼制的有關(guān)預備知識,其中有些內(nèi)容已在“計算機應用根底〞和“脈沖與數(shù)字電路〞課程中講過。由于它是學習微型計算機原理必不可少的根底知識,所以有必要進行復習。1/11/202431.1數(shù)和數(shù)制

1.1.1各種數(shù)制及其多項式表示法在人們應用各種數(shù)字符號表示事物個數(shù)的長期過程中形成了各種數(shù)制。數(shù)制是以表示數(shù)值所用的數(shù)字符號的個數(shù)來命名的,如十進制、十二進制、十六進制、六十進制等。各種數(shù)制中數(shù)字符號的個數(shù)稱為該數(shù)制的基數(shù)。一個數(shù)可以用不同計算制表示它的大小,雖然形式不同,但數(shù)的量值那么是相等的。在日常生活中,最常用的是十進制。1/11/202441.十進制數(shù)十進制采用0~9十個數(shù)字和一個小數(shù)點符號來表示任意十進制數(shù)。例如,374.53代表百位為3,十位7,個位為4,十分位為5,百分位為3的十進制數(shù)。同一個數(shù)字在不同的數(shù)位代表的數(shù)值是不同的。這種記數(shù)方法稱為位置記數(shù)法。在位置記數(shù)法中,對每一個數(shù)位賦以不同的位值,稱為“權(quán)〞。對于十進制,每個數(shù)位上的權(quán)是10的某次冪,個位、十位及百位的權(quán)分別為1、10及100。十分位、百分位的權(quán)分別為10-1和10-2。每個數(shù)位上的數(shù)字所表示的量是這個數(shù)字和該數(shù)位的權(quán)的乘積。因此,任意十進制數(shù)可按權(quán)展開為10的冪多項式。例如,374.53的多項式表示形式為:1/11/202453×102+7×101+4×100+5×10-1+3×10-2

因此,對于n位整數(shù)m位小數(shù)的任意十進制數(shù)N,可用多項式表示如下:

N10=Kn-1·10n-1+Kn-2·10n-2+…+K1·101+K0·100+K-1·10-1+K-2·10-2+…+K-(m-1)·10-(m-1)+K-m·10-m

其中i表示數(shù)的某一位;Ki表示第i位的數(shù)字,它可以為0~9中的任一數(shù)字;m和n為正整數(shù)。式中10為十進制的基數(shù)。1/11/202462.二進制數(shù)人們習慣用十進制計數(shù),但在電子計算機中,數(shù)是以器件的物理狀態(tài)來表示的,計算機中通常采用穩(wěn)態(tài)電子器件作為保存信息的根本元件,因此計算機中采用二進制數(shù)最方便。在二進制中,只有0和1兩個數(shù)字。二進制數(shù)同樣采用位置記數(shù)法,它的基數(shù)為2,每個數(shù)位上的權(quán)是2的某次冪。對于n位整數(shù)m位小數(shù)的任意二進制數(shù)N2,可以用多項式表示如下:1/11/20247例如:(1101.011)2=1×23+1×22+0×21+1×20+0×2-1+1×2-2+1×2-33.十六進制數(shù)計算機中采用二進制數(shù),優(yōu)點是物理實現(xiàn)容易且運算特別簡單,缺點是書寫冗長。因此常用十六進制(或有時用八進制)代替二進制來表示和書寫數(shù)據(jù)。在十六進制中,使用0,1,…,9,A,B,C,D,E,F等十六個數(shù)字符號,其中A、B、C、D、E、F分別與十進制中的10、11、12、13、14、15這6個數(shù)相對應。十六進制數(shù)同樣采用位置記數(shù)法,其基數(shù)16,每一數(shù)位上的權(quán)是16的某次冪。1/11/20248對于n位整數(shù)m位小數(shù)的任意十六進制數(shù)N16,可以用多項式表示如下:(Ki=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)例如(10AF.12)16=1×163+0×162+10×161+15×160+1×16-1+2×16-2實際表示時,一個十六進制數(shù)如果最高位數(shù)字為字母(A-F),那么字母前面必須加一個0,以便與變量名等相區(qū)別。1/11/20249表2.1給出了以上四種數(shù)制的對應關(guān)系。為防止混淆,可在數(shù)字的后面加填不同數(shù)制的區(qū)分符。區(qū)分符可以是數(shù)字角注,例如53710或537(十進制),11012(二進制),0EA216(十六進制),也可以用字母標注,其中:字母B(Binary)表示為二進制數(shù);字母D(Decimal)或不加字母表示為十進制數(shù);字母H(Hcxadccimal)表示為十六進制數(shù)。一般來說,對于基數(shù)為X的任一數(shù)可以用多項式表示為1/11/202410Ki——第i位的系數(shù),可以為0,1,…,(X-1)共X個數(shù)字符號中任一數(shù)字符號;m,n——冪指數(shù),均為正整數(shù);Xi——第i位的權(quán)。 教科書的第1頁給出了計數(shù)制的標準定義。1/11/2024111/11/202412各種數(shù)制的相互轉(zhuǎn)換1.非十進制數(shù)轉(zhuǎn)換成十進制數(shù)非十進制數(shù)轉(zhuǎn)換成十進制數(shù)比較簡單,可先將其按定義展開為多項式,再將系數(shù)及權(quán)均用十進制表示按十進制進行乘法與加法運算,所得結(jié)果即為該數(shù)對應的十進制數(shù)。例1.1.1將二進制數(shù)1101.101轉(zhuǎn)換為十進制數(shù)。轉(zhuǎn)換過程如下:1101.101B=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3=8+4+1+0.5+0.125=13.625∴1101.101B=13.6251/11/202413例1.1.2將十六進制數(shù)2AE.4轉(zhuǎn)換為十進制數(shù)。2AE.4H=2×162+10×161+14×160+4×16-1=512+160+14+0.25=686.25∴2AE.4H=686.252.十進制數(shù)轉(zhuǎn)換成非十進制整數(shù)(1)十進制整數(shù)轉(zhuǎn)換成非十進制整數(shù)設N為任一十進制整數(shù),假設要把它轉(zhuǎn)換成n位X進制整數(shù),那么N=1/11/202414顯然,等式右邊,除了最后一項K0以外,其余各項都包含基數(shù)X的因子,都能被X除盡。所以等式兩邊同除以基數(shù)X,余數(shù)正是要求的X進制數(shù)的最低位K0。商為Kn-1Xn-2+Kn-2Xn-3+…+K2X1+K1

同理,上式中各項除K1外,其余各項都包含基數(shù)X的因子,都能被X除盡。所以再將商除以X,余數(shù)正是要求的X進制數(shù)的次低位K1,商為Kn-1Xn-3+Kn-2Xn-4+…+K3X1+K2

如此一直進行下去,直到商等于0為止,就得到一系列余數(shù),它們正是要求的X進制數(shù)的各位。1/11/202415這樣我們可以把十進制整數(shù)轉(zhuǎn)換為X進制整數(shù)的方法總結(jié)為用該數(shù)或商“除以基數(shù)取余數(shù),先為低位后為高位〞。例1.1.3將十進制數(shù)301轉(zhuǎn)換為二進制數(shù)。轉(zhuǎn)換過程如下: 301/2=150 k0=1 9/2=4 k5=1 150/2=75 k1=0 4/2=2 k6=0 75/2=37 k2=1 2/2=1 k7=0 | 37/2=18 k3=1 1/2=0 k8=1 18/2=9 k4=0∴301=100101101B1/11/202416(2)十進制小數(shù)轉(zhuǎn)換成非十進制小數(shù)設N為任一十進制小數(shù),假設要把它轉(zhuǎn)換為m位X進制小數(shù),那么N==K-1X-1+K-2X-2+…+K-mX-m(2-6)等式兩邊同乘以基數(shù)X,得到K-1+K-2X-1+K-3X-2+…+K-mX-m+1其中K-1為整數(shù)局部,它正好是所要求的X進制小數(shù)的最高位;而新的小數(shù)局部為K-2X-1+K-3X-2+…+K-mX-m+1假設再將上式乘以X便得到K-2+K-3X-1+…+K-mX-m+21/11/202417K-2為整數(shù)局部,它正好是所要求的X進制小數(shù)的次高位。如此繼續(xù)進行下去,直到小數(shù)局部為零時止。假設乘積的小數(shù)局部始終不為0,說明相對應的X進制小數(shù)為不盡小數(shù)。這時,乘到能滿足計算機精度要求為止。綜上所述,我們可以把十進制小數(shù)轉(zhuǎn)換為相應X進制小數(shù)的方法總線為對該小數(shù)或乘以X后新的小數(shù)局部“乘以基數(shù)取整數(shù),先為高位后為低位〞。例1.1.4將0.6875分別轉(zhuǎn)換為二進制及十六進制小數(shù)。轉(zhuǎn)換為二進制的過程如下:0.6875×2=1.375K-1=10.375×2=0.75K-2=01/11/2024180.75×2=1.5K-3=10.5×2=1.0K-4=1∴0.6875=0.1011B轉(zhuǎn)換為十六進制的過程如下:0.6875×16=11.0K-1=B∴0.6875=0.BH例1.1.5將0.734轉(zhuǎn)換為二進制小數(shù)。轉(zhuǎn)換過程如下:0.734×2=1.468K-1=10.468×2=0.936K-2=01/11/2024190.936×2=1.872K-3=10.872×2=1.744K-4=10.744×2=1.488K-5=10.488×2=0.976K-6=0∴0.734=0.10110…B上面我們分別討論了十進制整數(shù)轉(zhuǎn)換為非十進制整數(shù)和十進制小數(shù)轉(zhuǎn)換為非十進制小數(shù)的方法。如果一個任意十進制數(shù)要轉(zhuǎn)換為非十進制數(shù),我們可以把整數(shù)局部和小數(shù)局部分別加以轉(zhuǎn)換,然后把轉(zhuǎn)換后的整數(shù)局部和小數(shù)局部相加。1/11/202420例1.1.6將十進制數(shù)301.6875分別轉(zhuǎn)換為二進制和十六進制數(shù)。利用例、例1.1.4的結(jié)果,得到:301=100101101B,0.6875=0.1011B301=12DH,0.6875=0.BH∴301.6875=100101101.1011B∴301.6875=12D.BH

3.十六進制數(shù)與二進制數(shù)之間的轉(zhuǎn)換由于16=24,故1位十六進制數(shù)相當于4位二進制數(shù)。這樣,十六進制數(shù)與二進制數(shù)之間的相互轉(zhuǎn)換是十分簡便的。1/11/202421二進制數(shù)轉(zhuǎn)換為十六進制數(shù)的方法是:首先從小數(shù)點開始分別向左和向右把整數(shù)及小數(shù)局部每4位分成一組。假設整數(shù)最高位的一組缺乏4位,那么在其左邊加0補足4位;假設小數(shù)最低位的一組缺乏4位,那么在其右邊加0補足4位。然后,用與每組二進制數(shù)所對應的十六進制數(shù)取代每組的4位二進制數(shù),即得到對應的十六進制數(shù)。例1.1.7二進制數(shù)1011101001.110101轉(zhuǎn)換為十六進制數(shù)的方法是:二進制數(shù)001011101001.11010100十六進制數(shù)2E9.D41/11/202422十六進制數(shù)轉(zhuǎn)換為二進制數(shù)的方法是:用相應的4位二進制數(shù)取代每1位十六進制數(shù)。例1.1.8十六進制數(shù)5C7A.3B轉(zhuǎn)換為二進制的方法是:十六進制數(shù)5C7A.3B二進制數(shù)0101110001111010.00111011∴1/11/2024231.1.3二進制數(shù)的算術(shù)運算二進制計數(shù)制不僅物理實現(xiàn)容易,而且運算方法也十進制計數(shù)制大為簡單。注意到二進制數(shù)加法是“逢二進一〞和減法是“借一作二〞的特點,再根據(jù)十進制數(shù)算術(shù)運算的方法,很容易理解和完成二進制數(shù)的算術(shù)運算。例1.1.910110101B+1111B。加法過程如下:被加數(shù)10110101加數(shù)00001111進位+111111和110001001/11/202424∴10110101B+111B=11000100B由此可見,兩個二進制數(shù)相加時,每1位有3個數(shù)(本位被加數(shù)和本位加數(shù)及低位來的進位)相加,得到本位的和及向高的進位。例1.1.1011000100B-100101B。減法過程如下:被減數(shù)11000100減數(shù)00100101借位-111111差10011111/11/202425∴11000100B-100101B=1001111B與加法相類似,兩個二進制相減時,每1位有3個數(shù)(本位被減數(shù),減數(shù)以及從低位來的借位)參加運算,本位被減數(shù)-本位減數(shù)-低位來的借位,即得到本位的差及向高位的借位。例1.1.111101B×1011B。乘法過程如下:被乘數(shù)1101乘數(shù)×10111101

1/11/20242611010000+1101積10001111∴1101B×1011B=10001111B對筆算來說,上述乘法過程不但是很清楚而且很方便,但對計算機來說,實現(xiàn)起來很不方便。有的微型計算機有專門的乘法指令來完成乘法運算。對于沒有乘法指令的微型計算機,乘法是采用局部積右移的方法編制乘法運算程序來實現(xiàn)的。1/11/202427例1.1.12100110B÷110B。除法過程如下:00011010010∴100110B÷110B=110B余10B有的微型計算機有專門的除法指令來完成除法運算。對于沒有除法指令的微型計算機,常用“相減-左移〞法編制除法運算程序?qū)崿F(xiàn)除法。1/11/202428二進制數(shù)的邏輯運算二進制數(shù)的邏輯運算常用的有“與〞、“或〞、“異或〞及“非〞運算等四種。在組成表達式時,可分別用符號“AND〞、“OR〞、“XOR〞及“NOT〞作為運算符,有時也用“∧〞、“∨〞、“十〞作為“與〞、“或〞、“異或〞的運算符,用數(shù)學上面加橫線“-〞表示對該數(shù)進行非運算。二進制數(shù)的邏輯運算只按位進行運算。1位二進制數(shù)運算規(guī)那么如下:“與〞運算的規(guī)那么為:1/11/2024291AND0=00AND1=00AND0=01AND1=1“或〞運算的規(guī)那么為:0OR0=00OR0=10OR1=11OR1=11/11/202430“異或〞運算的規(guī)那么為:0XOR0=01XOR0=10XOR1=11XOR1=0“非〞運算的規(guī)那么為:NOT0=1NOT1=0多位二進制數(shù)進行邏輯運算時,可以利用二進制數(shù)運算規(guī)那么按接進行運算。1/11/202431例1.1.13二進制數(shù)10010111和00111000的“與〞、“或〞及“異或〞。運算結(jié)果分別為:10010111與)001110000001000010010111或)001110001011111110010111異或)00111000101011111/11/202432例1.1.14二進制數(shù)10010111的“非〞。運算結(jié)果為:01101000注意:*1個字節(jié)、2個字節(jié)表示的二進制整數(shù)范圍*簡便的二十進制數(shù)轉(zhuǎn)換方法1/11/2024331.2有符號二進制數(shù)的表示方法及溢出問題1.2.1有符號二進制數(shù)的表示方法前面我們接觸的二進制數(shù)均為無符號數(shù),即所有二進制數(shù)位均為數(shù)值位,在很多數(shù)據(jù)處理過程中需要這樣看待某些數(shù)。然而實際的數(shù)值有時是帶有符號的,既可能是正數(shù),也可能是負數(shù)。這樣就存在一個有符號二進制數(shù)的表示方法問題。

1.數(shù)的符號表示方法為了表示一個有符號數(shù),除了數(shù)值位以外還應指定符號位,通常以這個數(shù)的最高位為符號位。我們假設討論的數(shù)為整數(shù)。1/11/202434對8位有符號二進制整數(shù),D7為符號位,并規(guī)定D7為0表示正數(shù)的符號“+〞;為1表示負數(shù)的符號“-〞。因此,8位有符號數(shù)的編碼格式為:D7D6D5D4D3D2D1D0符號位

數(shù)值位這樣,數(shù)的符號在機器中也數(shù)字化了,符號位的數(shù)值位一起完整地表示有符號二進制數(shù)。我們把一個數(shù)在機器中的表示形式稱為機器數(shù),而把它們的實際數(shù)值稱為機器數(shù)的真值。1/11/2024352.原碼表示法如果正數(shù)的符號位用0表示,負數(shù)的符號位用1表示,絕對值的編碼規(guī)那么與前面討論的無符號數(shù)編碼規(guī)那么相同。這種表示方法稱為原碼表示法。一個數(shù)X的原碼記作[X]原。設X=Xn-2Xn-3…X0(即n-1位二進制數(shù)),其中Xi為1位二進制數(shù),i=0,1,…,(n-2)。那么[X]原=0Xn-2Xn-3…X1X0當X≥01Xn-2Xn-3…X1X0當X≤0例X1=+1010101那么[X1]原=01010101X2=-1011101那么[X2]原=110111011/11/202436原碼表示的一個有趣情況是數(shù)0有兩種表示形式:[+0]原=00000000或[-0]原=100000008位二進制原碼所能表示的數(shù)值范圍為-127—+127。原碼表示法簡單且易于理解,與真值轉(zhuǎn)換也方便,這是它的優(yōu)點。缺點是進行加減運算時麻煩。如果參加運算的數(shù)可能為正,也可能為負,這時不僅要考慮運算是加還是減,而且還要考慮數(shù)的符號和數(shù)的絕對值大小。例如兩數(shù)相加時,要進行判斷:如果兩數(shù)同號,數(shù)值局部相加,符號不變;如果兩數(shù)異號,不僅數(shù)值局部實際相減,而且還要比較兩數(shù)的絕對值大小,才能確定實際的被減數(shù)和減數(shù)。1/11/202437因此采用原碼表示后,將使運算器的邏輯復雜化或增加機器運行時間。為此,引入了補碼表示法,它可以使正、負數(shù)的加法和減法運算簡化為單一人相加運算。

3.補碼表示法(1)補碼的概念根據(jù)同余的概念a+NK=a(modK)其中K為模,N為任意整數(shù)。就是說,在模的意義下,數(shù)a與該數(shù)本身加上其模的任意整數(shù)倍之和相等。1/11/202438在數(shù)a的無數(shù)個a+NK同余數(shù)中,我們感興趣的是N為1的同余數(shù),即補數(shù):[a]補數(shù)=a+K(modK)a0≤a<KK-|a|-K<a<0(2-9)由式(2-9)確定的兩種條件下數(shù)a的補數(shù),就是補碼的定義和補碼編碼規(guī)那么的根底。在計算機運算過程中,數(shù)據(jù)的位數(shù),即字長總是有限的。這里假設字長為n,兩數(shù)相加求和時,如果n位的最高位產(chǎn)生了進位,就會丟掉。=1/11/202439這正是在模的意義下相加的概念。相加時丟掉的進位即等于模。所以,當n位表示整數(shù)時(1位為符號位,n-1位為數(shù)值位),它的模為2n,即:100……0n個0我們把X的補碼記為[X]補,補碼可定義為:

[X]補=X當0≤X<2n-1

2n+X當-2n-1≤X<01/11/202440從定義式(2-10)可見,正數(shù)的補碼與其原碼相同,只有負數(shù)才有求補的問題。所以,嚴格地說,“補碼表示法〞應稱為“負數(shù)的補碼表示法〞。一個二進制數(shù),以2n為模,它的補碼稱為2補碼。(2)一個數(shù)的補碼的求法①根據(jù)定義求補碼[X]補=2n+X=2n-|X|,X<0例1.2.2X=-1010111,n=8,那么[X]補=28+(-1010111B)=100000000B-1010111B=10101001B(mod28)1/11/202441這種方法要做一次減法,很不方便,一般不用。②利用原碼求補碼X=-Xn-2Xn-3…X1X0=X<0那么[X]原=2n-1+Xn-2Xn-3…X1X0由定義式(2-10)得:[X]補=2n+X=2n-1+2n-1-∵2n-1=1/11/202442∴[X]補=2n-1+=2n-1=2n-1符號位[X]原數(shù)值位按位取反因此,一個負數(shù)X的補碼等于其原碼除符號位保持不變外,其余各位按位取反,再在最低位加1。例1.2.3X=-1010101B,當n=8時,那么[X]原=11010101B1/11/202443↓↓↓↓↓↓↓↓[X]補=10101010B+1=10101011B值得注意的是,0的補碼只有唯一的形式,符號位和數(shù)值位均為0。8位二進制補碼所能表示的數(shù)值范圍為-128~+127。表2.2給出了8位二進制數(shù)碼對應的無符號二進制數(shù)、原碼及補碼的值。(3)數(shù)的補碼表示轉(zhuǎn)換為原碼表示

一個用補碼表示的負數(shù),如將[X]補再求一次補,即將[X]補除符號位外取反加1就可得到[X]原,可以表示為1/11/2024441/11/202445[[X]補]補=[X]原(證明從略)例1.2.4[X]原=11010101B[X]補=10101011B那么[[X]補]補=11010100B+1=11010101B=[X]原因此,一個二進制補碼表示的數(shù),最高位為符號位,當符號位為“0〞(即正數(shù))時,它的原碼同補碼。當符號位為1〞(即負數(shù))時,對其補碼再求補,就可得到它的原碼。(4)補碼的運算規(guī)那么補碼運算的第一個根本公式是兩個n位二進制數(shù)之和的補碼等于該兩數(shù)的補碼之和(證明從略),即1/11/202446[X+Y]補=[X]補+[Y]補(mod2n)(2-12)該式(2-12)說明,當帶符號的兩個數(shù)采用補碼形式表示時,進行加法運算可以把符號位和數(shù)值位一起進行運算(或符號位有進位,那么丟掉),結(jié)果為兩數(shù)之和的補碼形式。下面通過具體例子可以驗證該公式的正確性。例1.2.5用補碼進行以下運算:(+33)+(+15);(-33)+(+15);(+33)+(-15);(-33)+(-15)。00100001B[+33]補11011111B[-33]補

+00001111B[+15]補+00001111B[+15]補00110000B[+48]補11101110B[-18]補1/11/20244700100001B[+33]補11011111B[-33]補

+11110001B[-15]補+11110001B[-15]補[1]00010010B[+18]補[1]11010000B[-48]補進位,丟掉進位,丟掉補碼運算的第二個根本公式是兩個n位二進制數(shù)之差的補碼等于該兩數(shù)的補碼之差(證明從略),即[X-Y]補=[X]補-[Y]補(mod2n)(2-13)該式(2-13)說明,當帶符號的兩個數(shù)采用補碼形式表示時,進行減法運算可以把符號位和數(shù)值位一起進行運算(假設符號位有錯位,那么丟掉),1/11/202448結(jié)果為兩數(shù)之差的補碼形式。這是補碼表示法的一個優(yōu)點。下面通過具體例子可以驗證該公式的正確性。例1.2.6用補碼進行以下運算:(+33)-(-15);(-33)-(-15);(+33)-(+15);(-33)-(+15)。00100001B[+33]補11011111B[-33]補

-11110001B[-15]補-11110001B[-15]補[1]00110000B[+48]補[1]11101110B[-18]補借位,丟掉借位,丟掉1/11/20244900100001B[+33]補11011111B[-33]補

-00001111B[+15]補-00001111B[+15]補00010010B[+18]補11010000B[-48]補補碼減法運算時,也可以利用加法根本公式。因為X-Y=X+(-Y)∴[X-Y]補=[X+(-Y)]補=[X]補+[-Y]補即[X-Y]補=[X]補+[-Y]補(mod2n)[JY](2-14)這是補碼運算的第三個根本公式。1/11/202450該式說明,求[X-Y]補可以用[X]補與[-Y]補相加來實現(xiàn)。這里的[-Y]補,即對減數(shù)進行求負操作,也就是對補碼表示的數(shù)(無論是正數(shù)還是負數(shù))求得其相應的用補碼表示的負數(shù)(如果原來是正數(shù),求負后得負數(shù);原來是負數(shù),求負后得正數(shù))。一般稱[Y]補求得[-Y]補的過程叫變補或求負。用補碼表示數(shù)時,變補或求負是一種很有用的運算。其規(guī)那么是:如果[Y]補=Yn-1Yn-2…Y1Y0那么對[Y]補的每一位(包括符號位)都按位取反,然后再加1,結(jié)果即為[-Y]補。1/11/202451例1.2.7假設[Y]補=01010111B[+87]補那么[-Y]補=10101001B[-87]補假設[Y]補=10101001B[-87]補那么[-Y]補=01010111B[+87]補顯然,兩個帶符號數(shù)采用補碼表示時,減法運算可以通過“變補相加法〞來實現(xiàn)。即[X]補-[Y]補=[X]補+[-Y]補(mod2n)(2-15)在設計運算器時,利用這一公式使減法運算用“變補相加法〞來實現(xiàn),使得運算器的結(jié)構(gòu)得到了簡化,這是補碼表示法的又一個優(yōu)點。1/11/202452例1.2.8用補碼進行X-Y運算。假設:X=33,Y=15[X]補=00100001B[Y]補=00001111B[-Y]補=11110001B那么00100001B[+33]補+11110001B[-15]補[1]00010010B[+18]補假設:X=33,Y=-15[X]補=00100001B[Y]補=11110001B[-Y]補=00001111B1/11/202453那么00100001B[+33]補+00001111B[+15]補00110000B[+48]補假設:X=-33,Y=-15[X]補=11011111B[Y]補=11110001B[-Y]補=00001111B那么11011111B[-33]補+00001111B[+15]補11101110B[-18]補1/11/202454假設:X=-33,Y=15[X]補=11011111B[Y]補=00001111B[-Y]補=11110001B那么11011111B[-33]補+11110001B[-15]補[1]11010000B[-48]補需要指出的是,一旦采用補碼進行加減運算,所有參加運算的數(shù)和運算的結(jié)果都是用補碼表示的。計算機里的實際情況就是這樣的。要得到真值,還需轉(zhuǎn)換。1/11/202455在1.1節(jié)中,我們已討論了無符號二進制數(shù)的加減運算規(guī)那么。任意給定一個二進制數(shù),我們可以把它看作有符號數(shù),也可以看作無符號數(shù)。其差異是如何看待最高位,看作有符號數(shù)時,最高位被看作符號位;看作無符號數(shù)時,最高位也看作數(shù)值位(即沒有符號位)。對于兩個無符號二進制數(shù)的加減運算,利用前面說明的有符號數(shù)補碼表示法的加減運算規(guī)那么得到的結(jié)果仍然是正確的。1/11/2024561.2.2有符號數(shù)運算的溢出問題如果計算機的字長為n位,n位二進制數(shù)的最高位為符號位,其余n-1位為數(shù)值位,采用補碼表示法時,可表示的數(shù)X的范圍為-2n-1≤X≤2n-1-1當n=8時,可表示的有符號數(shù)的范圍為-128~+127;當n=16時,可表示的有符號數(shù)的范圍為-32768~+32767。兩個有符號數(shù)進行加減運算時,如果運算結(jié)果超出可表示的有符號和的范圍時,就會發(fā)生溢出,使計算結(jié)果出錯。很顯然,溢出只能出現(xiàn)在兩個同號數(shù)相加或兩個異號數(shù)相減的情況下。1/11/202457具體地講,對于加運算,如果次高位(數(shù)值局部最高位)形成進位參加最高位,而最高位(符號位)相加(包括次高位的進位)卻沒有進位輸出時;或者反過來,次高位沒有進位參加最高位,但最高位卻有進位輸出時,都將發(fā)生溢出。因為這兩種情況分別是:兩正數(shù)相加,結(jié)果超出了范圍,形式上變成了負數(shù);兩負數(shù)相加,結(jié)果超出了范圍,形式上變成了正數(shù)。01001000B+72+01100010B+9810101010B-86例2.2.9(+72)+(+98)有進位無進位溢出,結(jié)果出錯1/11/202458例1.2.10(-83)+(-80)。10101101B-83+10110000B-80[1]01011101B+93無進位有進位溢出,結(jié)果出錯對于減運算,當次高不需從最高位借位,但最高位卻需借位(正數(shù)減負數(shù),差超出范圍);或者反過來,次高位需從最高位借位,但最高位不需借位(負數(shù)減正數(shù),差超出范圍),也會出現(xiàn)溢出。1/11/202459例1.2.11(+72)-(-98)。01001000B+72-1001110B-9810101010B-86無借位有借位溢出,結(jié)果出錯例1.2.12(-83)-(+80)。10101101B-83-01010000B+8001011101B-93有借位無借位溢出,結(jié)果出錯1/11/2024601.3定點數(shù)和浮點數(shù)1.3.1定點法所謂定點法,即小數(shù)點在數(shù)中的位置是固定不變的。以定點法表示的實數(shù)稱作定點數(shù)。通常,定點表示也有兩種方法:方法1:規(guī)定小數(shù)點固定在最高數(shù)值位之前,機器中能表示的所有數(shù)都是小數(shù)。n位數(shù)值局部所能表示的數(shù)N的范圍(原碼表示,下同)為1-2-n≥N≥-(1-2-n)1/11/202461它能表示的數(shù)的最大絕對值為1-2-n,最小絕對值為2-n。方法2:規(guī)定小數(shù)點固定的最低數(shù)值位之后,機器中能表示的所有數(shù)都是整數(shù)。n位數(shù)值局部所能表示的數(shù)N的范圍為2n-1≥N≥-2(2n-1)它能表示的數(shù)的最大絕對值為2n-1,最小絕對值為1。下面給出定點數(shù)的兩種表示法。符號位·數(shù)值位·小數(shù)點符號位·數(shù)值位小數(shù)點·1/11/202462因為實際數(shù)值很少有都是小數(shù)或都是整數(shù)的,所以定點表示法要求程序員做的一件重要工作是為要計算的問題選擇“比例因子〞。所有原始數(shù)據(jù)都要用比例因子化成小數(shù)或整數(shù),計算結(jié)果又要用比例因子恢復實際值。在計算過程中,中間結(jié)果假設超過最大絕對值,機器便產(chǎn)生溢出,叫做“上溢〞,這時必須重新調(diào)整比例因子。中間結(jié)果如果小于最小絕對值,計算機只能把它當作0處理,叫做“下溢〞,這時也必須重新調(diào)整比例因子。結(jié)于復雜計算,計算中間需屢次調(diào)整比例因子。1/11/2024631.3.2浮點法

任意一個二進制數(shù)N總可以寫成下面的形式:N=±d·2±p(2-16)其中:d稱為尾數(shù),是二進制純小數(shù),指明數(shù)的全部有效數(shù)字。前面的符號稱作數(shù)符,表示數(shù)的符號,用尾數(shù)前的1位表示,0表示正號,1表示負號;p稱為階數(shù),它前面的符號稱作階符,用階碼前一位表示,階符為正時,用0表示,階符為負時,用1表示。由此可知,將尾部d的小數(shù)點向右(對+p)或向左(對-p)移動p位,即得數(shù)值N。所以階符和階碼指明小數(shù)點的位置。小數(shù)點隨著p的符號和大小而浮動。這種數(shù)稱為浮點數(shù)。浮點數(shù)的編碼格式如下所示:1/11/202464階符階碼數(shù)符尾數(shù)1位M位1位n位設階碼的位數(shù)為m位,尾數(shù)的位數(shù)為n位,那么浮點數(shù)的取值范圍為2-n·2-(2m-1)≤|N|≤(1-2-n)·2(2m-1)浮點數(shù)能表示的數(shù)值范圍大,是它的主要可取之處。1/11/202465如果尾數(shù)的絕對值小于1且大于等于0.5,即采用原碼編碼的正數(shù)或負數(shù)和采用補碼編碼的正數(shù),其尾數(shù)的最高位數(shù)字為1;采用補碼編碼的負數(shù),其尾數(shù)的最高位數(shù)字為0,那么該浮點二進制數(shù)被稱為規(guī)格化浮點數(shù)。浮點運算后經(jīng)常要把結(jié)果規(guī)格化,規(guī)格化的操作是尾數(shù)每右移1位(相當于小數(shù)點左移1位),階碼加1;尾數(shù)每左移1位,階碼減1。數(shù)的加減運算要求小數(shù)點對齊。對于浮點表示的數(shù)而言,就是階碼(包括階符)相等。1/11/202466使階碼相等的操作稱為對階。一個浮點數(shù)階碼的改變,必須伴隨著尾數(shù)的移位,才不改變數(shù)的值,即階碼加1,尾數(shù)必須右移1位;假設階碼減1,那么要求尾數(shù)左移1位。兩個規(guī)格化的浮點數(shù)相加或相減之前必須對階。對階的規(guī)那么是:將兩個數(shù)中階碼小的數(shù)的尾數(shù)右移、階碼增大,直到與另一個數(shù)的階碼相等為止。這樣操作是合理的,因為尾數(shù)右移,只可能喪失最低有效位,造成誤差較小。1/11/2024671.4二進制編碼的十進制數(shù)(BCD編碼)

1.4.18421BCD碼如前所述,計算機中是使用二進制代碼工作的。但是由于長期的習慣,在日常生活中,人們最熟悉的數(shù)制是十進制。為解決這一矛盾,提出了一人比較適合于十進制系統(tǒng)的二進制代碼的特殊形式,即將1位十進制的0~9這十個數(shù)字分別用4位二進制碼的組合來代表,在此根底上,可按位對任意十進制數(shù)進行編碼。這就是二進制編碼的十進制數(shù),簡稱BCD碼(Binary-CodcdDecimal)。1/11/2024684位二進制數(shù)碼有16種組合,原那么上可任選其中的10種作為代碼,分別代表十進制中0到9這10個數(shù)字。為便于記憶和比較直觀,最常用的方法是8421BCD碼,8、4、2、1分別是4位二進制數(shù)的位權(quán)值。表2.3給出了十進制數(shù)和二進制碼的對應關(guān)系。這種BCD碼與十進制數(shù)的關(guān)系直觀,其相互轉(zhuǎn)換也很簡單。例十進制數(shù)和BCD碼相互轉(zhuǎn)換將十進制數(shù)75.4轉(zhuǎn)換為BCD碼75.4=(01110101.0100)BCD將BCD碼10000101.0101轉(zhuǎn)換為十進制數(shù)1/11/2024691/11/202470(10000101.0101)BCD=85.5同一個8位二進制代碼表示的數(shù),當認為它表示的是二進制數(shù)和認為它表示的是二進制編碼的十進制數(shù)時,數(shù)值是不相同的。例如00011000作為二進制數(shù)時,其值為24;但作為2位BCD碼時,其值為18。在計算機中,BCD碼有兩種根本格式:組合式BCD碼格式和別離式BCD碼格式。在組合式BCD碼格式中,兩位BCD碼的十進制數(shù),存放在一個字節(jié)中〔壓縮BCD碼〕。如數(shù)82存放格式為:100000101/11/202471在別離BCD碼格式中,每位數(shù)存放在8位字節(jié)的低4位局部,高4位局部的內(nèi)容與數(shù)值無關(guān),如數(shù)82存放格式為:uuuu1000uuuu0010其中u表示任意。1/11/2024721.4.2BCD碼的加減運算下面我們以組合式BCD碼格式為例討論BCD碼的加法與減法運算。由于BCD編碼是將每個十進制數(shù)用一組4位二進制數(shù)來表示,因此,假設將這種BCD碼直接交計算機去運算,由于計算機總是把數(shù)當作二進制數(shù)來運算,所以結(jié)果可能出錯。例2.4.2用BCD碼求38+49。0011100038的BCD碼+0100100149的BCD碼1000000181的BCD碼1/11/202473對應十進制數(shù)為81,正確結(jié)果應為87,顯然結(jié)果是錯誤的。其原因是,十進制數(shù)相加應當是“逢十進一〞,而計算機按二進制數(shù)運算,每4位為一組,低4位向高4位進位與十六進制數(shù)低位向高位的情況相當,是“逢十六進一〞,所以當相加結(jié)果超過9時將比正確結(jié)果少6。因此,結(jié)果出錯。解決的方法是對二進制加法運算的結(jié)果采用“加6修正〞,將二進制加法運算的結(jié)果修正為BCD碼加法運算的結(jié)果。兩個兩位BCD數(shù)相加時,對二進制加法運算結(jié)果修正的規(guī)那么如下:(1)如果任何兩個對應位BCD數(shù)相加的結(jié)果向高一位無進位時,假設得到的結(jié)果小于或等于9,那么該位不需修正;假設得到的結(jié)果大小9且小于16位,那么該位進行加6修正。1/11/202474(2)如果任何兩個對應位BCD數(shù)相加的結(jié)果向高一位有進位時(即結(jié)果大于或等于16),該位進行加6修正。(3)低位修正結(jié)果使高位大于9時,高位進行加6修正。這種修正稱為BCD調(diào)整。下面通過例題驗證上述規(guī)那么的正確性。用BCD碼求35+21。0011010135+001000012101010110561/11/202475低4位,高4位均不滿足修正法那么,所以結(jié)果正確,不需修正。例用BCD碼求25+37。0010010125+001101113701011100低4位滿足法那么1+00000110加6修正0110001062結(jié)果正確11/11/202476例用BCD碼求38+49。0011100038+010010014910000001低4位滿足法那么2+00000110加6修正1000011187結(jié)果正確1例用BCD碼求42+95。0100001042+1001010195

1/11/20247711010111高4位滿足法那么1+01100000加6修正[1]00110111137結(jié)果正確1例用BCD碼求91+83。1001000191+1000001183[1]00010100高4位滿足法那么2+01100000加6修正[1]01110100174結(jié)果正確11/11/202478例用BCD碼求94+7。1001010094+00000111710011011低4位滿足法那么1+00000110加6修正10100001高4位滿足法那么3+01100000加6修正[1]00000001101結(jié)果正確1/11/202479例用BCD碼求76+45。0111011076+010001014510111011低4位、高4位均滿足法那么1+01100110同時加6修正[1]00100001121結(jié)果正確11/11/202480兩個BCD碼進行減法運算時,當?shù)臀幌蚋呶挥薪栉粫r,由于“借一作十六〞與“借一作十〞的差異,將比正確結(jié)果多6,所以有借位時,可采用“減6修正法〞來修正。實際上,計算機中有BCD調(diào)整指令,兩個BCD碼進行加減時,先按二進制加減指令進行運算,再對結(jié)果用BCD調(diào)整指令進行調(diào)整,就可得到正確的十進制運算結(jié)果。另外,BCD碼的加減運算,也可以在運算前由程序先變換成二進制,然后由計算機對二進制數(shù)運算處理,運算以后再將二進制數(shù)

溫馨提示

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

評論

0/150

提交評論