二進碼十進數
二進碼十進數(英語:Binary-Coded Decimal,簡稱BCD,中國大陸稱BCD碼或二-十進制編碼)是一種十進制數字編碼的形式。在這種編碼下,每個十進制數字用一串單獨的二進制位元來儲存與表示。常見的有以4位元表示1個十進制數字,稱為壓縮的BCD碼(compressed or packed);或者以8位元表示1個十進制數字,稱為未壓縮的BCD碼(uncompressed or zoned)。
這種編碼技術,最常用於會計系統的設計裡,因為會計制度經常需要對很長的數字做準確的計算。相對於一般的浮點式記數法,採用BCD碼,既可儲存數值的精確度,又可使電腦免除作浮點運算所耗費的時間。此外,對於其他需要高精確度的計算,BCD編碼亦很常用。
BCD碼的主要優點是在機器格式與人可讀的格式之間轉換容易,以及十進制數值的高精度表示。BCD碼的主要缺點是增加了實現算術運算的電路的複雜度,以及儲存效率低。
常用BCD編碼方式
對應不同需求,各人亦開發了不同的編碼方法,以適應不同的需求。這些編碼,大致可以分成有權碼和無權碼兩種:
- 有權碼,如:8421(最常用)、2421、5421
- 無權碼,如:餘3碼、格雷碼
8421碼
8421碼又稱為BCD碼,是十進制代碼中最常用的一種。[1]在這種編碼方式中,每一位二值代碼的「1」都代表一個固定數值。將每位「1」所代表的十進制數加起來就可以得到它所代表的十進制數位。因為代碼中從左至右看每一位「1」分別代表數字「8」「4」「2」「1」,故得名8421碼。其中每一位「1」代表的十進制數稱為這一位的權。因為每位的權都是固定不變的,所以8421碼是恆權碼。
餘3碼
餘3碼是由8421碼加上0011形成的一種無權碼,由於它的每個字元編碼比相應8421碼多3,故稱餘3碼。例如,十進制字元5的餘3碼等於5的8421碼0101加上0011,即為1000。同樣,餘3碼中也有6種狀態0000,0001,0010,1101,1110和1111是不允許出現的。 餘3碼也是一種對9的自補代碼,因而可給運算帶來方便。其次,在將兩個餘3碼表示的十進制數相加時,能正確產生進位訊號,但對「和」必須修正。修正的方法是:如果有進位,則結果加3;如果無進位,則結果減3。 餘3碼與十進制之間的轉換也是按位元進行的,值得注意的是每位十進制數的編碼都應餘3。
2421碼
2421碼是一種有權碼,權值由高到低分別為2、4、2、1,特點是大於等於5的4位元二進制數中最高位為1,小於5的最高位為0。如5的2421碼表示為1011而不是0101。
比較
以下為三種常見的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 | 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 |
外部連結
參考文獻
- ^ Evans, David Silvester. Chapter Four: Ancillary Equipment: Output-drive and parity-check relays for digitizers. Digital Data: Their derivation and reduction for analysis and process control 1. London, UK: Hilger & Watts Ltd / Interscience Publishers. 1961-03: 46–64 [56–57] [2020-05-24]. (8+82 pages) (NB. The 4-bit 8421 BCD code with an extra parity bit applied as least significant bit to achieve odd parity of the resulting 5-bit code is also known as Ferranti code.)