BCD碼

BCD碼

二進碼十進數(英語:Binary-Coded Decimal,簡稱BCD,大陸稱BCD碼或二-十進制編碼)是一種十進制的數字編碼形式。這種編碼下的每個十進制數字用一串單獨的二進制比特來存儲表示。常見的有4位表示1個十進制數字,稱為壓縮的BCD碼(compressed or packed);或者8位表示1個十進制數字,稱為未壓縮的BCD碼(uncompressed or zoned)。這種編碼技術,最常用於會計系統的設計里,因為會計制度經常需要對很長的數字元串作準確的計算。相對於一般的浮點式記數法,採用BCD碼,既可保存數值的精確度,又可免卻使計算機作浮點運算時所耗費的時間。此外,對於其他需要高精確度的計算,BCD編碼亦很常用。

基本信息

概述

BCD碼BCD碼
Binary-Coded Decimal‎,簡稱BCD,稱BCD碼或二-十進制代碼,亦稱二進碼十進數。是一種二進制的數字編碼形式,用二進制編碼的十進制代碼。這種編碼形式利用了四個位元來儲存一個十進制的數碼,使二進制和十進制之間的轉換得以快捷的進行。這種編碼技巧,最常用於會計系統的設計里,因為會計制度經常需要對很長的數字串作準確的計算。相對於一般的浮點式記數法,採用BCD碼,既可保存數值的精確度,又可免卻使電腦作浮點運算時所耗費的時間。此外,對於其他需要高精確度的計算,BCD編碼亦很常用。
由於十進制數共有0、1、2、……、9十個數碼,因此,至少需要4位二進制碼來表示1位十進制數。4位二進制碼共有2^4=16種組,在這16種代碼中,可以任選10種來表示10個十進制數碼,共有N=16!/(16-10)!約等於2.9乘以10的10次方種方案。常用的BCD代碼列於末。

特點

8421編碼直觀,好理解。
5421碼和2421碼中大於5的數字都是高位為1,5以下的高位為0。
餘3碼是8421碼加上3,有上溢出和下溢出的空間。
格雷碼相鄰2個數有三位相同,只有一位不同。

分類

BCD碼可分為有權碼和無權碼兩類:有權BCD碼有8421碼、2421碼、5421碼,其中8421碼是最常用的;無權BCD碼有餘3碼、格雷碼(注意:格雷碼並不是BCD碼)等。

8421

8421BCD碼是最基本和最常用的BCD碼,它和四位自然二進制碼相似,各位的權值為8、4、2、1,故稱為有權BCD碼。和四位自然二進制碼不同的是,它只選用了四位二進制碼中前10組代碼,即用0000~1001分別代表它所對應的十進制數,餘下的六組代碼不用。

5421和2421

5421BCD碼和2421BCD碼為有權BCD碼,它們從高位到低位的權值分別為5、4、2、1和2、4、2、1。這兩種有權BCD碼中,有的十進制數碼存在兩種加權方法,例如,5421BCD碼中的數碼5,既可以用1000表示,也可以用0101表示;2421BCD碼中的數碼6,既可以用1100表示,也可以用0110表示。這說明5421BCD碼和2421BCD碼的編碼方案都不是惟一的,表1-2隻列出了一種編碼方案。

上表中2421BCD碼的10個數碼中,0和9、1和8、2和7、3和6、4和5的代碼對應位恰好一個是0時,另一個就是1。就稱0和9、1和8互為反碼。

餘3碼

餘3碼是8421BCD碼的每個碼組加3(0011)形成的。常用於BCD碼的運算電路中。

Gray碼

Gray碼也稱循環碼,其最基本的特性是任何相鄰的兩組代碼中,僅有一位數碼不同,因而又叫單位距離碼。
Gray碼的編碼方案有多種,典型的Gray碼如下表所示。從表中看出,這種代碼除了具有單位距離碼的特點外,還有一個特點就是具有反射特性,即按表中所示的對稱軸為界,除最高位互補反射外,其餘低位數沿對稱軸鏡像對稱。利用這一反射特性可以方便地構成位數不同的Gray碼。

編碼方式

最常用的BCD編碼,就是使用"0"至"9"這十個數值的二進碼來表示。這種編碼方式,在中國大陸稱之為“8421碼”。除此以外,對應不同需求,各人亦開發了不同的編碼方法,以適應不同的需求。這些編碼,大致可以分成有權碼和無權碼兩種:
有權BCD碼,如:8421(最常用)、2421、5421…
無權BCD碼,如:餘3碼、格雷碼…
以下為三種常見的BCD編碼的比較。

三種方式比較

十進數 8421-BCD碼 餘3-BCD碼 2421-A碼
(M10) D C B A C3 C2 C1 C0 a3 a2 a1 a0
0 0 0 0 0 0 0 1 1 0 0 0 0
1 0 0 0 1 0 1 0 0 0 0 0 1
2 0 0 1 0 0 1 0 1 0 0 1 0
3 0 0 1 1 0 1 1 0 0 0 1 1
4 0 1 0 0 0 1 1 1 0 1 0 0
5 0 1 0 1 1 0 0 0 0 1 0 1
6 0 1 1 0 1 0 0 1 0 1 1 0
7 0 1 1 1 1 0 1 0 0 1 1 1
8 1 0 0 0 1 0 1 1 1 1 1 0
9 1 0 0 1 1 1 0 0 1 1 1 1

常用BCD碼

十進制數 8421碼 5421碼 2421碼 餘3碼 餘3循環碼
0 0000 0000 0000 0011 0010
1 0001 0001 0001 0100 0110
2 0010 0010 0010 0101 0111
3 0011 0011 0011 0110 0101
4 0100 0100 0100 0111 0100
5 0101 1000 1011 1000 1100
6 0110 1001 1100 1001 1101
7 0111 1010 1101 1010 1111
8 1000 1011 1110 1011 1110
9 1001 1100 1111 1100 1010

舉例

某二進制無符號數11101010,轉換為三位非壓縮BCD數,按百位、十位和個位的順序表示,應為<U>__C</U>__。
A.00000001/00000011/00000111 B.00000011/00000001/00000111
C.00000010/00000011/00000100 D.00000011/00000001/00001001
解:(1)11101010轉換為十進制:234
(2)按百位、十位和個位的順序表示,應為<U>__C</U>__。
附註:壓縮BCD碼與非壓縮BCD碼的區別——壓縮BCD碼的每一位用4位二進制表示,一個位元組表示兩位十進制數。例如10010110B表示十進制數96D;非壓縮BCD碼用1個位元組表示一位十進制數,高四位總是0000,低4位的0000~1001表示0~9.例如00001000B表示十進制數8.
BCD碼的運算法則
BCD碼的運算規則:BCD碼是十進制數,而運算器對數據做加減運算時,都是按二進制運算規則進行處理的。這樣,當將BCD碼傳送給運算器進行運算時,其結果需要修正。修正的規則是:當兩個BCD碼相加,如果和等於或小於1001(即十進制數9),不需要修正;如果相加之和在1010到1111(即十六進制數0AH~0FH)之間,則需加6進行修正;如果相加時,本位產生了進位,也需加6進行修正。這樣做的原因是,機器按二進制相加,所以4位二進制數相加時,是按“逢十六進一”的原則進行運算的,而實質上是2個十進制數相加,應該按“逢十進一”的原則相加,16與10相差6,所以當和超過9或有進位時,都要加6進行修正。下面舉例說明。
【例1.3】需要修正BCD碼運算值的舉例。
(1)計算5+8;(2)計算8+8
解:(1)將5和8以8421BCD輸入機器,則運算如下:
0101
+)1000
1101結果大於9
+)0110加6修正
10011即13的BCD碼
結果是0011,即十進制數3,還產生了進位。5+8=13,結論正確。
(2)將8以8421BCD輸入機器,則運算如下:
1000
+)1000
10000結果大於9
+)0110加6修正
1011016的BCD碼
結果是0110,即十進制的6,而且產生進位。8+8=16,結論正確。
微機原理代碼:(AL=BCD5,BL=BCD8)設AH=0,則
ADDAL,BL
AAA
結果為AX=0103H,表示非壓縮十進制數,CF=1,AF=1,AH=1,AL=3
使用AAA指令,可以不用禁止高半位元組,只要在相加後立即執行AAA指令,便能在AX中得到一個正確的非壓縮十進制數

相關詞條

相關搜尋

熱門詞條

聯絡我們