計(jì)算機(jī)內(nèi)毫無例外地都使用二進(jìn)制數(shù)進(jìn)行運(yùn)算,但通常采用8進(jìn)制和十六進(jìn)制的形式讀寫。對于計(jì)算機(jī)技術(shù)專業(yè)人員,要理解這些數(shù)的含義是沒問題,但對非專業(yè)人員卻不那么容易的。由于日常生活中,人們最熟悉的數(shù)制是十進(jìn)制,因此專門規(guī)定了一種二進(jìn)制的十進(jìn)制碼,稱為BCD碼,它是一種以二進(jìn)制表示的十進(jìn)制數(shù)碼。
BCD碼
二進(jìn)制編碼的十進(jìn)制數(shù),簡稱BCD碼(Binarycoded Decimal)。 這種方法是用4位二進(jìn)制碼的組合代表十進(jìn)制數(shù)的0,1,2,3,4,5,6 ,7,8,9 十個(gè)數(shù)符。4位二進(jìn)制數(shù)碼有16種組合,原則上可任選其中的10種作為代碼,分別代表十進(jìn)制中的0,1,2,3,4,5,6,7,8,9 這十個(gè)數(shù)符。最常用的BCD碼稱為8421BCD碼,8.4.2.1 分別是4位二進(jìn)數(shù)的位取值。 點(diǎn)擊此處將給出十進(jìn)制數(shù)和8421BCD編碼的對應(yīng)關(guān)系表。
1、BCD碼與十進(jìn)制數(shù)的轉(zhuǎn)換
BCD碼與十進(jìn)制數(shù)的轉(zhuǎn)換。關(guān)系直觀,相互轉(zhuǎn)換也很簡單,將十進(jìn)制數(shù)75.4轉(zhuǎn)換為BCD碼如:
75.4=(0111 (0101.0100)BCD 若將BCD碼1000 0101.0101轉(zhuǎn)換為十進(jìn)制數(shù)如: (1000 0101.0101)BCD=85.5
注意:同一個(gè)8位二進(jìn)制代碼表示的數(shù),當(dāng)認(rèn)為它表示的是二進(jìn)制數(shù)和認(rèn)為它表示的是二進(jìn)制編碼的十進(jìn)制數(shù)時(shí),數(shù)值是不相同的。
例如:00011000,當(dāng)把它視為二進(jìn)制數(shù)時(shí),其值為24;但作為2位BCD碼時(shí), 其值為18。
又例如00011100,如將其視為二進(jìn)制數(shù),其值為28,但不能當(dāng)成BCD碼,因?yàn)樵?421BCD碼中,它是個(gè)非法編碼 。
2、BCD碼的格式
計(jì)算機(jī)中的BCD碼,經(jīng)常使用的有兩種格式,即分離BCD碼,組合BCD碼。
所謂分離BCD碼,即用一個(gè)字節(jié)的低四位編碼表示十進(jìn)制數(shù)的一位,例如數(shù)82的存放格式為:
_ _ _1 0 0 0 _ _ _ _0 0 1 0 其中_表示無關(guān)值。
組合BCD碼,是將兩位十進(jìn)制數(shù),存放在一個(gè)字節(jié)中,例82的存放格式是1000 0010
3、BCD碼的加減運(yùn)算
由于編碼是將每個(gè)十進(jìn)制數(shù)用一組4位二進(jìn)制數(shù)來表示,因此,若將這種BCD碼直接交計(jì)算機(jī)去運(yùn)算,由于
計(jì)算機(jī)總是把數(shù)當(dāng)作二進(jìn)制數(shù)來運(yùn)算,所以結(jié)果可能會出錯(cuò)。例:用BCD碼求38+49。
解決的辦法是對二進(jìn)制加法運(yùn)算的結(jié)果采用“加6修正,這種修正稱為BCD調(diào)整。即將二進(jìn)制加法運(yùn)算的結(jié)果修正為BCD碼加法運(yùn)算的結(jié)果,兩個(gè)兩位BCD數(shù)相加時(shí),對二進(jìn)制加法運(yùn)算結(jié)果采用修正規(guī)則進(jìn)行修正。修正規(guī)則:
?。?)如果任何兩個(gè)對應(yīng)位BCD數(shù)相加的結(jié)果向高一位無進(jìn)位,若得到的結(jié)果小于或等于9,則該不需修正;若得到的結(jié)果大于9且小于16時(shí),該位進(jìn)行加6修正。
?。?)如果任何兩個(gè)對應(yīng)位BCD數(shù)相加的結(jié)果向高一位有進(jìn)位時(shí)(即結(jié)果大于或等于16),該位進(jìn)行加6修正。
(3)低位修正結(jié)果使高位大于9時(shí),高位進(jìn)行加6修正。
下面通過例題驗(yàn)證上述規(guī)則的正確性。
用BCD碼求35+21 BCD碼求25+37 用BCD碼求38+49 用BCD碼求42+95
用BCD碼求91+83 用BCD碼求94+7 用BCD碼求76+45
兩個(gè)組合BCD碼進(jìn)行減法運(yùn)算時(shí),當(dāng)?shù)臀幌蚋呶挥薪栉粫r(shí),由于”借一作十六“與”借一作十“的差別,將比正確的結(jié)果多6,所以有借位時(shí),可采用”減6修正法“來修正。兩個(gè)BCD碼進(jìn)行加減時(shí),先按二進(jìn)制加減指令進(jìn)行運(yùn)算,再對結(jié)果用BCD調(diào)整指令進(jìn)行調(diào)整,就可得到正確的十進(jìn)制運(yùn)算結(jié)果。 實(shí)際上,計(jì)算機(jī)中既有組合BCD數(shù)的調(diào)整指令,也有分離BCD數(shù)的調(diào)整指令。另外,BCD碼的加減運(yùn)算,也可以在運(yùn)算前由程序先變換成二進(jìn)制數(shù),然后由計(jì)算機(jī)對二進(jìn)制數(shù)運(yùn)算處理,運(yùn)算以后再將二進(jìn)制數(shù)結(jié)果由程序轉(zhuǎn)換為BCD碼。
ASCII碼
ASCII碼是美國國家信息交換標(biāo)準(zhǔn)字符碼(American Standard Code for Information Interchange )的字頭縮碼。早期的ASCII碼采用7位二進(jìn)制代碼對字符進(jìn)行編碼。它包括32個(gè)通用控制字符,10個(gè)阿拉伯?dāng)?shù)字,52個(gè)英文大,小字母,34個(gè)專用符號共128個(gè)。7位ASCII代碼在最高位添加一個(gè)“0”組成8位代碼,正好占一個(gè)字節(jié),在存儲和傳輸信息中,最高位常作為奇偶校驗(yàn)位使用。擴(kuò)展ASCII碼,即第八位不再視為校驗(yàn)位而是當(dāng)作編碼位使用。擴(kuò)展 ASCII碼有256個(gè)。
bcd碼和ascii碼的區(qū)別簡單的打個(gè)比方~~~~例如十進(jìn)制中的3的ascii碼為33H,小寫a和大寫A分別對應(yīng)不同的ascii碼的值。而BCD碼是8421碼,例如在壓縮BCD碼中34H表示十進(jìn)制中得34,64H表示十進(jìn)制中得64,在非壓縮BCD碼中0304H表示十進(jìn)制中得34,0506H表示十進(jìn)制中的56. 通常ASCII碼用來在計(jì)算機(jī)種表示各種字符和字母,而BCD碼則用來方便的表示十進(jìn)制數(shù)
BCD碼(Binary-Coded Decimal)二進(jìn)碼十進(jìn)數(shù),是一種二進(jìn)制的數(shù)字編碼形式,形式如:XXXXYYYY
通常是指8421碼,就是將十進(jìn)制的數(shù)以8421的形式展開成二進(jìn)制,大家知道十進(jìn)制是0~9十個(gè)數(shù)組成,這十個(gè)數(shù)每個(gè)數(shù)都有自己的8421碼。
bcd碼是四位二進(jìn)制碼, 也就是將十進(jìn)制的數(shù)字轉(zhuǎn)化為二進(jìn)制, 但是和普通的轉(zhuǎn)化有一點(diǎn)不同, 每一個(gè)十進(jìn)制的數(shù)字0-9都對應(yīng)著一個(gè)四位的二進(jìn)制碼,對應(yīng)關(guān)系如下: 十進(jìn)制0 對應(yīng) 二進(jìn)制0000 ;十進(jìn)制1 對應(yīng)二進(jìn)制0001 。。。。。。。 9 1001 接下來的10就有兩個(gè)上述的碼來表示 10 表示為00010000 也就是BCD碼是遇見1001就產(chǎn)生進(jìn)位,不象普通的二進(jìn)制碼,到1111才產(chǎn)生進(jìn)位10000
壓縮BCD碼與非壓縮BCD碼的區(qū)別:
一個(gè)BCD碼占4位,而一個(gè)字節(jié)有8位。若把二個(gè)BCD碼放在一個(gè)字節(jié)中,就叫壓縮的BCD碼;
壓縮BCD碼的每一位用4位二進(jìn)制表示,一個(gè)字節(jié)表示兩位十進(jìn)制數(shù)。例如10010110B表示十進(jìn)制數(shù)96D;
而一個(gè)字節(jié)只放一個(gè)BCD碼,高位置0,則叫非壓縮的BCD碼。
非壓縮BCD碼用1個(gè)字節(jié)表示一位十進(jìn)制數(shù),高四位總是0000,低4位的0000~1001表示0~9.例如00001000B表示十進(jìn)制數(shù)8.
BCD碼只能代表數(shù)字0~9,ASCII碼中也有代表數(shù)字0~9的碼元,可以查看ASCII表,‘0’=48,‘1’=49,依次類推。
壓縮的BCD碼要轉(zhuǎn)換成兩個(gè)ASCII值,應(yīng)該怎么轉(zhuǎn)換?
先把壓縮BCD拆開變成非壓縮BCD,然后加48就是ASCII中的0~9了!如:
1、BCD碼00110010,拆開得到:0011和0010
2、分別變成非壓縮BCD碼:00000011和00000010,得到十進(jìn)制數(shù)字:3和2
3、看ASC表可以得出BCD碼0--9轉(zhuǎn)換為ASC碼為:48---58,所以對應(yīng)ASC碼值為:51和50
另附ASCII 字符代碼表
評論
查看更多