十進(jìn)制數(shù)的每一個(gè)數(shù)位的基為10,但到了計(jì)算機(jī)內(nèi)部,出于存儲(chǔ)與計(jì)算方便的目的,必須采用基2碼對(duì)每個(gè)十進(jìn)制數(shù)位進(jìn)行重編碼,所需要的最少的基2碼的位數(shù)為log210,取整數(shù)為4。4位基2碼有16種不同的組合,怎樣從中選擇出10個(gè)組合來(lái)表示十進(jìn)制數(shù)位的0-9,有非常多的可行方案,下面介紹其中的最常用的幾種。
① 十進(jìn)制有權(quán)碼
是指表示一個(gè)十進(jìn)制數(shù)位的4位基2碼的每一位有確定的位權(quán)。
用得最普遍的是8421碼,即4個(gè)基2碼位的權(quán)從高向低分別為8、4、2和1,使用基2碼的0000、0001、…1001這10種組合,分別表示0到9這十個(gè)值。這種編碼的優(yōu)點(diǎn)是這4位基2碼之間滿足二進(jìn)制的規(guī)則,而十進(jìn)制數(shù)位之間則是十進(jìn)制規(guī)則,故稱(chēng)這種編碼為以二進(jìn)制編碼的十進(jìn)制(Binary Coded Decimal)數(shù),簡(jiǎn)稱(chēng)BCD碼或二-十進(jìn)制碼。另一個(gè)優(yōu)點(diǎn)是在數(shù)字符的ASCII碼與這種編碼之間的轉(zhuǎn)換方便,即取每個(gè)數(shù)字符的ASCII碼的低4位的值便直接得到該數(shù)字的BCD碼,入/出操作簡(jiǎn)便。在計(jì)算機(jī)內(nèi)實(shí)現(xiàn)BCD碼之間的算術(shù)運(yùn)算要復(fù)雜一些,在某些情況下,需要對(duì)加法運(yùn)算的結(jié)果進(jìn)行修正。修正規(guī)則是:
若兩個(gè)8421碼數(shù)相加之和等于或小于1001,即10進(jìn)制的9,不需要修正;
若相加之和在10到15之間,一方面應(yīng)向高位產(chǎn)生一進(jìn)位,本位還要進(jìn)行加6修正,進(jìn)位是在進(jìn)行加6修正時(shí)產(chǎn)生的;
若相加之和在16和18之間時(shí),向高位的進(jìn)位會(huì)在相加過(guò)程中自己產(chǎn)生,對(duì)本位還需進(jìn)行加6修正。下面給出三種情況下的具體例子。
例如,1+8=9的運(yùn)算結(jié)果是正確的,不必修正。
0 0 0 1
+)1 0 0 0 (1)10+(8)10=(9)10
1 0 0 1
而4+9的結(jié)果就必須用 +6 修正,進(jìn)位是在修正過(guò)程中產(chǎn)生的。
0 1 0 0
+)1 0 0 1 (4)10+(9)10 =(1)10 (3)10
1 1 0 1
+) 0 1 1 0
1 0 0 1 1
而7+9的結(jié)果也必須用 +6 修正,進(jìn)位是在相同加過(guò)程中產(chǎn)生的。
0 1 1 1
+)1 0 0 1 (7)10+(9)10 =(1)10(6)10
1 0 0 0 0
+) 0 1 1 0
1 0 1 1 0
另外幾種有權(quán)碼,如2421、5211、84-2-1、4311碼(表2.9),也都是用4位有權(quán)基2碼表示一個(gè)十進(jìn)制數(shù)位,但這4位基2碼之間并不符合二進(jìn)制規(guī)則。這幾種有權(quán)碼的特性表現(xiàn)為:
當(dāng)采用2421、5211和4311編碼時(shí),任何兩個(gè)十進(jìn)制數(shù)位相加產(chǎn)生10或大于10的結(jié)果,相應(yīng)的基2碼相加會(huì)向高一位產(chǎn)生進(jìn)位,有利于實(shí)現(xiàn)逢十進(jìn)位的計(jì)數(shù)和加法規(guī)則。
任何兩個(gè)相加之和等于9的十進(jìn)制數(shù)位的基2碼,互為反碼,即滿足十進(jìn)制數(shù)按9互補(bǔ)(9's Complement)的關(guān)系,有利于簡(jiǎn)化減法處理。表2.9給出的是上面提到的十進(jìn)制數(shù)位的編碼方案。
表2.9 四位有權(quán)碼
十進(jìn)制數(shù) |
8421碼 |
2421碼 |
5211碼 |
840201碼 |
4311碼 |
② 十進(jìn)制無(wú)權(quán)碼
是指表示一個(gè)十進(jìn)制數(shù)位的4位基2碼的每一位沒(méi)有確定的位權(quán)。
在采用的無(wú)權(quán)碼的一些方案中,早期用的比較多的是余3碼(Excess-3 code),是把原二進(jìn)制的每個(gè)代碼都加0011值得到的。它的主要優(yōu)點(diǎn)是執(zhí)行十進(jìn)制數(shù)位相加時(shí),能正確地產(chǎn)生進(jìn)位信號(hào),而且還給減法運(yùn)算帶來(lái)了方便。
采用余3碼執(zhí)行加法運(yùn)算的規(guī)則是:
當(dāng)兩個(gè)余3碼相加不產(chǎn)生進(jìn)位時(shí),應(yīng)從所得結(jié)果中減去0011;
產(chǎn)生進(jìn)位時(shí),一方面應(yīng)將進(jìn)位信號(hào)送入高位余3碼,本位還應(yīng)執(zhí)行加0011的修正操作。例如:
(1) 0101 0011 (20)10+(75)10= (95)10
+) 1010 1000
1111 1011
-) 0011 0011
1100 1000
(2) 0101 1011 (28)10+(55)10=(83)10
+) 1000 1000
1101 1 0011
1110
-)0011 + 0011
1011 0110
格雷碼是另外一種常用的二-十進(jìn)制編碼,是使任何兩個(gè)相鄰的代碼只有一個(gè)二進(jìn)制位的狀態(tài)不同,其余三個(gè)二進(jìn)制位必須有相同狀態(tài)。這種編碼方法的好處是,從一編碼變到下一個(gè)相鄰編碼時(shí),只有一位的狀態(tài)發(fā)生變化,有利于得到更好的譯碼波形,在模擬→數(shù)字、數(shù)字→模擬轉(zhuǎn)換的電路中得到更好的運(yùn)行結(jié)果。用四個(gè)二進(jìn)制位的格雷碼表示十進(jìn)制數(shù)的十個(gè)狀態(tài)的方案很多。表2.10給出兩組最常用的編碼值。
表2.10 四位無(wú)權(quán)碼
十進(jìn)制數(shù) |
余三碼 |
格雷碼(1) |
格雷碼(2) |
③ 十進(jìn)制數(shù)的其它編碼方法
也有用多于4位基2碼,如用5位、7位、甚至10位基2碼,來(lái)表示一個(gè)十進(jìn)制數(shù)位的方案。有些屬于無(wú)權(quán)碼,有些屬于有權(quán)碼。表2.11給出4種編碼方案。
表2.11 十進(jìn)制數(shù)位編碼方案
十進(jìn)位 |
無(wú)權(quán)碼 |
有權(quán)碼 | ||
符號(hào) |
五中取二碼 |
蠕變碼 |
二元五進(jìn)制碼 5043210 |
獨(dú)熱碼 0123456789 |
五中取二碼 (2-out-of-5 Code)使用5位基2碼,并且每個(gè)代碼必須包含2個(gè)"1"和3個(gè)"0",因此提供了一位(或奇數(shù)位)檢粗能力。
蠕變碼(Creeping Code)也用5位基2碼,是由一個(gè)"1"逐次移位擴(kuò)展和收縮而形成的,符合格雷碼的編碼規(guī)則。
④ 數(shù)字串在計(jì)算機(jī)內(nèi)的表示與存儲(chǔ)
人們習(xí)慣使用10進(jìn)制數(shù),而在計(jì)算機(jī)內(nèi),采用二進(jìn)制表示和處理數(shù)據(jù)更方便。因此,在計(jì)算機(jī)輸入和輸出數(shù)據(jù)時(shí),要進(jìn)行十→二和二→十的進(jìn)制轉(zhuǎn)換處理,這是多數(shù)應(yīng)用環(huán)境中的實(shí)際情況。而在某些特定的應(yīng)用領(lǐng)域中,如商業(yè)統(tǒng)計(jì),其特點(diǎn)是運(yùn)算簡(jiǎn)單而數(shù)據(jù)量很大,這樣使輸入輸出過(guò)程中的進(jìn)制轉(zhuǎn)換所占的時(shí)間比例很大。從提高機(jī)器的運(yùn)行效率考慮,也可以采用在計(jì)算機(jī)內(nèi)部直接用十進(jìn)制方式表示和處理數(shù)據(jù),這要求計(jì)算機(jī)內(nèi)部增加少量硬件線路。目前,大多數(shù)通用性較強(qiáng)的計(jì)算機(jī),都能直接處理十進(jìn)制形式表示的數(shù)值。采用十進(jìn)制表示數(shù)據(jù)的另一個(gè)目的,是提高數(shù)據(jù)的表示范圍和運(yùn)算精度,就是說(shuō),十進(jìn)制數(shù)在計(jì)算機(jī)內(nèi)是以十進(jìn)制的數(shù)位組成的數(shù)串形式存儲(chǔ)與計(jì)算的,其位數(shù),即串長(zhǎng)是可變的,可規(guī)定最長(zhǎng)可用位數(shù),因此不受二進(jìn)制整數(shù)和浮點(diǎn)數(shù)統(tǒng)一格式的約束。
十進(jìn)制數(shù)串在計(jì)算機(jī)內(nèi)主要有兩種表示形式。
a. 字符串形式,即一個(gè)字節(jié)存放一個(gè)十進(jìn)制的數(shù)位或符號(hào)位。在主存中,這樣的一個(gè)十進(jìn)制數(shù)占用連續(xù)的多個(gè)字節(jié),故為了指明這樣一個(gè)數(shù),需要給出該數(shù)在主存中的起始地址和位數(shù)(串的長(zhǎng)度)。
對(duì)用這種方式表示的數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算是很不方便的,因?yàn)槊總€(gè)數(shù)字符占用一個(gè)字節(jié),其低四位的值表示數(shù)值,而高四位的值在進(jìn)行算術(shù)運(yùn)算時(shí)不具有數(shù)值的意義。因此,用這種方式表示的十進(jìn)制字符串,主要用在非數(shù)值計(jì)算的有關(guān)應(yīng)用領(lǐng)域中。
b. 壓縮的十進(jìn)制數(shù)串形式,即一個(gè)字節(jié)存放兩個(gè)十進(jìn)制的數(shù)位,它比前一種形式節(jié)省存儲(chǔ)空間,又便于直接完成十進(jìn)制數(shù)的算術(shù)運(yùn)算,是廣泛采用的較為理想的方法。
用壓縮的十進(jìn)制數(shù)串表示一個(gè)數(shù),要占用主存連續(xù)的多個(gè)字節(jié),每個(gè)數(shù)位占用半個(gè)字節(jié)(即4個(gè)二進(jìn)制位),其值可用二-十進(jìn)制編碼(BCD碼,數(shù)字符的ASCII碼的低4位)表示,符號(hào)位也占用半個(gè)字節(jié)并存放在最低數(shù)字位之后,其值選用四位編碼的六種冗余狀態(tài)中的有關(guān)值,如用1100表示正號(hào),用1101表示負(fù)號(hào)。在這種表示中,規(guī)定數(shù)值位加符號(hào)位之和必須為偶數(shù),當(dāng)其和不為偶數(shù)時(shí),應(yīng)在最高數(shù)字位之前補(bǔ)一個(gè)0。此時(shí),表示一個(gè)數(shù)要占用該偶數(shù)值位的一半那么多個(gè)字節(jié)。例如:
+123被表示成 123C, -12 被表示成 012D。
要指明一個(gè)壓縮的十進(jìn)制數(shù)串,也需給出它在主存中的首地址和數(shù)字位個(gè)數(shù)(不含符號(hào)位),又稱(chēng)位長(zhǎng),位長(zhǎng)為0的數(shù)其值為0。壓縮的十進(jìn)制數(shù)串表示方法的優(yōu)點(diǎn)是位長(zhǎng)可變,許多機(jī)器中規(guī)定該長(zhǎng)度從0到31,有的甚至更長(zhǎng)。
評(píng)論
查看更多