> bcd | 十進位 | 二進位 <
// BCD - 二進位編碼十進位,用於精確的小數運算
十進位精度
保留十進位精度,避免二進位浮點捨入誤差。
半位元組編碼
每個十進位數字都精確編碼為 4 位二進位(一个半位元組)。
多種格式
支援 8421、2421、5421、Excess-3 和 Gray BCD 等編碼。
>> 技術說明
BCD 的工作原理:
BCD 將每個十進位數字(0–9)編碼為 4 位二進位。不同的 BCD 格式使用不同的位權:8421(標準加權)、2421(自補)、5421(五進位混合)、Excess-3(每位數字加 3),以及 Gray BCD(最小化相鄰數值之間的位翻轉)。壓縮 BCD 以每位元組儲存兩個數字,提高儲存效率。
BCD 格式範例:
十進位: 9 5 3
8421 BCD: 1001 0101 0011
2421 BCD: 1111 1011 0011
5421 BCD: 1100 1000 0011
Excess-3: 1100 1000 0110
Gray BCD: 1101 0111 0010
壓縮: 10010101 00110000
(95) (30)
為什麼要使用 BCD:
- >需要精確十進位表示的金融運算
- >數位顯示器與七段顯示解碼器
- >即時鐘電路
- >計算機與運算晶片
- >PLC 與工業控制系統
>> 常見問題
什麼是 BCD?
BCD(二進位編碼十進位,Binary-Coded Decimal)是一種以二進位位元表示十進位數字的編碼方式,其中每個十進位數字都以 4 位二進位表示。適用於對十進位精度要求很高的情境。
為什麼使用 BCD 而不是二進位?
BCD 可以避免十進位計算中的捨入誤差,並且更容易直接對應到十進位顯示。非常適合金融等需要精確小數表示的應用。
什麼是壓縮 BCD?
壓縮 BCD(Packed BCD)在一個位元組(8 位)中儲存兩個十進位數字,每個半位元組代表一個數字。與每個數字使用完整一個位元組的非壓縮 BCD 相比更省空間。
常見的 BCD 格式有哪些?
常見的 BCD 格式包括:8421(標準加權)、2421(自補)、5421(五進位混合)、Excess-3(每位數字加 3)以及 Gray BCD(減少相鄰數值之間的位變化)。
// 速查表
| Dec | 8421 | 2421 | Excess-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 |
// 程式碼範例
Decimal 25 BCD 0010 0101 (packed: 0x25)
Binary 0001 1001 (0x19)
Decimal 1234 BCD 0001 0010 0011 0100 (2 bytes, packed)
Overhead 4 bits per digit vs log2(10) = 3.32 bits -> ~20% larger
Add 0x19 + 0x28 = 0x41 -> +6 correction per nibble > 9 -> 0x47
>> 更多問題
問:BCD 是什麼,與二進位有何不同?
答:BCD 用 4 位元分別編碼每個十進位數字。25 變為 0010 0101,而純二進位是 11001。十進位數值保持精確,也便於顯示。
問:什麼是壓縮 BCD 與非壓縮 BCD?
答:壓縮 BCD 每位元組存兩位數字(0x25 = 25)。非壓縮 BCD 每位數字占一個位元組,高半位元組為 0 或像 EBCDIC 那樣的區位標記。
問:為什麼現在還在使用 BCD?
答:用於需要無捨入誤差的精確十進位運算:金融系統、計算機、即時時鐘和 7 段顯示器。代價是每位 4 位元而非 3.32 位元,約多 20% 的空間。