十進制數的二進制編碼
??? 在人機交互過程中,為了既滿足系統中使用二進制數的要求,又適應人們使用十進制數的習慣,通常用4位二進制代碼對十進制數字符號進行編碼,簡稱為二-十進制代碼,或稱BCD(Binary Coded Decimal)碼。它既有二進制的形式,又有十進制的特點。常用的BCD碼有8421碼、2421碼和余3碼3種,它們與十進制數字符號對應的編碼如表1.4所示。
?
表1.4 常用的3種BCD碼
進制字符?8421碼?2421碼?余3碼
0?0000?0000?0011
1?0001?0001?0100
2?0010?0010?0101
3?0011?0011?0110
4?0100?0100?0111
5?0101?1011?1000
6?0110?1100?1001
7?0111?1101?1010
8?1000?1110?1011
9?1001?1111?1100
一、8421碼?
??? 8421碼是最常用的一種有權碼,其4位二進制碼從高位至低位的權依次為23、22、21、20,即為8、4、2、1,故稱為8421碼 。按8421碼編碼的0~9與用4位二進制數表示的0~9完全一樣,所以,8421碼是一種人機聯系時廣泛使用的中間形式。
??? 注意:
??? ※ 8421碼中不允許出現1010~1111四種組合,因為沒有十進制數字符號與其對應。
??? ※ 十進制數字符號的8421碼與相應ASCII碼的低四位相同,這一特點有利于簡化輸入輸出過程中BCD碼與字符代碼的轉換。
??? 1.8421碼與十進制數之間的轉換
??? 8421碼與十進制數之間的轉換是按位進行的,即十進制數的每一位與4位二進制編碼對應。例如
??????????????? (258)10 = (0010 0101 1000)8421碼??
??????????????? (0001 0010 0000 1000)8421碼?=(1208)10???
??? 2.8421碼與二進制的區別
??? 例如, (28)10 = (11100)2 = (00101000)8421
??? 二、2421碼?
??? 2421碼是另一種有權碼,其4位二進制碼從高位至低位的權依次為2、4、2、1。若一個十進制字符X的2421碼為a3 a2 a1 a0,則該字符的值為
? ????????????? X = 2a3 + 4a2 + 2a1 + 1a0
??? 例如,(1101)2421碼?= (7)10。?
??? 1.2421碼與十進制數之間的轉換
??? 2421碼與十進制數之間的轉換同樣是按位進行的,例如,
??????????????? (258)10 = (0010 1011 1110)2421碼
??????????????? (0010 0001 1110 1011)2421碼?= (2185)10
??? 2.注意
??2421碼不具備單值性。例如,0101和1011都對應十進制數字5。為了與十進制字符 一 一 對應,2421碼不允許出現0101~1010的6種狀態。
??2421碼是一種對9的自補代碼。即一個數的2421碼只要自身按位變反,便可得到該數對9的補數的2421碼。例如,4對9的補數是5,將4的2421碼0100按位變反,便可得到5的2421碼1011。具有這一特征的BCD碼可給運算帶來方便,因為直接對BCD碼進行運算時,可利用其對9的補數將減法運算轉化為加法運算。?
??2421碼與二進制數的區別!
??? 三、余3碼
??? 余3碼是由8421碼加上0011形成的一種無權碼 ,由于它的每個字符編碼比相應8421碼多3,故稱為余3碼。例如,十進制字符5的余3碼等于5的8421碼0101加上0011,即為1000。
??? 1.注意:
??? ☆ 余3碼有6種狀態0000、0001、0010、1101、1110和1111是不允許出現的。
??? ☆ 余3碼也是一種對9的自補代碼,因而可給運算帶來方便。
??? ☆ 將兩個余3碼表示的十進制數相加時,能正確產生進位信號,但對“和”必須修正。修正的方法是:? 如果有進位,則結果加3;如果無進位,則結果減3。
??? 2.余3碼與十進制數之間的轉換
??? 余3碼與十進制數之間的轉換也是按位進行的,值得注意的是每位十進制數的編碼都應余3。例如,
??????????????? (256)10 = (0101 1000 1001)余3碼?
????????????????? (1000 1001 1001 1011)余3碼 = (5668)10
計算機中使用的是二進制數,人們習慣使用的是十進制數,因此,輸入到計算機中的十進制數需要轉換成二進制數;數據輸出時,應將二進制數轉換成十進制數。為了方便,大多數通用性較強的計算機需要能直接處理十進制形式表示的數據。為此,在計算機中還設計了一種中間數字編碼形式,它把每一位十進制數用 4 位二進制編碼表示,稱為二進制編碼的十進制表示形式,簡稱 BCD碼(binary coded decimal),又稱為二—十進制數。
4 位二進制數碼,可編碼組合成 16 種不同的狀態,而十進制數只有 0,1,…,9 這十個數碼,因此選擇其中的十種狀態作BCD碼的方案有許多種,如 8421BCD碼、格雷碼、余3碼等,編碼方案見表2.1.1。
表2.1.1 用二進制編碼表示的十進制數
十進制數?8421碼?2421碼?5211碼?余3碼?格雷碼
0?0000?0000?0000?0011?0000
1?0001?0001?0001?0100?0001
2?0010?0010?0011?0101?0011
3?0011?0011?0101?0110?0010
4?0100?0100?0111?0111?0110
5?0101?1011?1000?1000?1110
6?0110?1100?1010?1001?1010
7?0111?1101?1100?1010?1000
8?1000?1110?1110?1011?1100
9?1001?1111?1111?1100?0100
最常用的 BCD 碼是 8421BCD 碼。8421BCD 碼選取 4 位二進制數的前 10 個代碼分別對應表示十進制數的 10 個數碼,1010 ~ 1111這 6 個編碼未被使用。從表中可以看到這種編碼是有權碼。四個二進制位的位權從高向低分別為8,4,2和1,若按權求和,和數就等于該代碼所對應的十進制數。例如,0110 = 22 + 21 = 6。
把一個十進制數變成它的 8421BCD 碼數串,僅對十進制數的每一位單獨進行即可。例如變1986為相應的 8421BCD 碼表示,結果為 0001 1001 1000 0110。反轉換過程也類似,例如變 0101 1001 0011 0111 為十進制數,結果應為 5937 。
8421BCD 碼的編碼值與字符 0 到 9 的 ASCII 碼的低 4 位相同,有利于簡化輸入輸出過程中從字符 → BCD 和從BCD → 字符的轉換操作,是實現人機聯系時比較好的中間表示。需要譯碼時,譯碼電路也比較簡單。
8421BCD 碼的主要缺點是實現加減運算的規則比較復雜,在某些情況下,需要對運算結果進行修正。
評論
查看更多