BCD碼

BCD碼

二進制數字碼
BCD碼(Binary-Coded Decimal‎),用4位二進制數來表示1位十進制數中的0~9這10個數碼,是一種二進制的數字編碼形式,用二進制編碼的十進制代碼。BCD碼這種編碼形式利用了四個位元來儲存一個十進制的數碼,使二進制和十進制之間的轉換得以快捷的進行。這種編碼技巧最常用于會計系統的設計裡,因為會計制度經常需要對很長的數字串作準确的計算。相對于一般的浮點式記數法,采用BCD碼,既可保存數值的精确度,又可免去使計算機作浮點運算時所耗費的時間。此外,對于其他需要高精确度的計算,BCD編碼亦很常用。
    中文名:二進碼十進數 外文名:Binary-Coded Decimal‎ 适用領域: 所屬學科: 别名:二-十進制代碼 簡稱:BCD碼 類别:權碼和無權碼 類型:有權BCD碼有8421碼、2421碼

簡介

BCD碼也稱二進碼十進數,BCD碼可分為有權碼和無權碼兩類。其中,常見的有權BCD碼有8421碼、2421碼、5421碼,無權BCD碼有餘3碼、餘3循環碼、格雷碼。8421BCD碼是最基本和最常用的BCD碼,它和四位自然二進制碼相似,各位的權值為8、4、2、1,故稱為有權BCD碼。5421BCD碼和2421BCD碼同為有權碼,它們從高位到低位的權值分别為5、4、2、1和2、4、2、1。餘3碼是由8421碼加3後形成的,是一種“對9的自補碼”。餘3循環碼是一種變權碼,每一位的在不同代碼中并不代表固定的數值,主要特點是相鄰的兩個代碼之間僅有一位的狀态不同。格雷碼(也稱循環碼)是由貝爾實驗室的FrankGray在1940年提出的,用于PCM方法傳送信号時防止出錯。格雷碼是一個數列集合,它是無權碼,它的兩個相鄰代碼之間僅有一位取值不同。餘3循環碼是取4位格雷碼中的十個代碼組成的,它同樣具相鄰性的特點  。

類别

8421

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

5421和2421

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

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

餘3 碼

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

餘3循環碼

餘3循環碼是無權碼,即每個編碼中的1和0沒有确切的權值,整個編碼直接代表一個數值。主要優點是相鄰編碼隻有一位變化,避免了過渡碼産生的“噪聲”。

Gray碼

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

編碼方式

最常用的BCD編碼,就是使用"0"至"9"這十個數值的二進碼來表示。這種編碼方式,在稱之為“8421碼”(日常所說的BCD碼大都是指8421BCD碼形式)。除此以外,對應不同需求,各人亦開發了不同的編碼方法,以适應不同的需求。這些編碼,大緻可以分成有權碼和無權碼兩種:有權BCD碼,如:8421(最常用)、2421、5421…

無權BCD碼,如:餘3碼、格雷碼…(注意:格雷碼并不是BCD碼)以下為三種常見的BCD編碼的比較。

十進數 8421-BCD碼 餘3-BCD碼 2421-A碼

(M10) DCBA C3C2C1C0 a3a2a1a0

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 / 1 0 1 1

6 - 0 1 1 0 / 1 0 0 1 / 1 1 0 0

7 - 0 1 1 1 / 1 0 1 0 / 1 1 0 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

十進制數

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

常用BCD碼

舉例

某二進制無符号數11101010,轉換為三位非壓縮BCD數,按百位、十位和個位的順序表示,應為__C__。

A.00000001 / 00000011 / 00000111  B. 00000011 / 00000001 / 00000111

C.00000010 / 00000011 / 00000100  D. 00000011 / 00000001 / 00001001

解:(1)11101010轉換為十進制:234

(2)按百位、十位和個位的順序表示,應為__C__。

附注:壓縮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 以 8421 BCD輸入機器,則運算如下:

0 1 0 1

+) 1 0 0 0

1 1 0 1 結果大于 9

+) 0 1 1 0 加 6 修正

1 0 0 1 1 即13 的 BCD碼

結果是 0011,即十進制數3,還産生了進位。5+8=13,結論正确。

(2)将8以8421 BCD輸入機器,則運算如下:

1 0 0 0

+)1 0 0 0

1 0 0 0 0産生進位

+)0 1 1 0 加6修正

1 0 1 1 0 16的BCD碼

結果是0110,即十進制的6,而且産生進位。8+8=16,結論正确。

微機原理代碼: (AL=BCD 5,BL=BCD 8) 設AH=0,則

ADD AL,BL

AAA

結果為 AX=0103H,表示非壓縮十進制數,CF=1,AF=1,AH=1,AL=3

使用AAA指令,可以不用屏蔽高半字節,隻要在相加後立即執行AAA指令,便能在AX中得到一個正确的非壓縮十進制數

相關詞條

相關搜索

其它詞條