BCD (Binary-Coded Decimal) 以 4 位二進制表示一位十進制數字 (0-9)。常見的 8421 碼中,十進制 17 的 BCD 為 0001 0111 (十六進制 0x17),而其二進制值為 0001 0001 (0x11)。BCD 常用於會計、金融等需精確十進制運算的領域。
// BCD → 二進制
unsigned bcd2bin(unsigned char val) {
return (val & 0x0F) + (val >> 4) * 10;
}
// 二進制 → BCD
unsigned char bin2bcd(unsigned val) {
return ((val / 10) << 4) + (val % 10);
}
int main(void) {
unsigned val = 17;
printf("bin: %u -> 0x%x\n", val, val); // 17 -> 0x11
printf("bcd: %u -> 0x%x\n", bin2bcd(val), bin2bcd(val)); // 23 -> 0x17
return 0;
}
輸出:
bin:17--->0x11 bcd:23--->0x17關鍵差異
| 表示值 | 二進制 (BIN) | BCD 碼 |
|---|---|---|
| 十進制 17 | 0x11 (0001 0001) | 0x17 (0001 0111) |
BCD 將每個十進制位獨立編碼,便於十進制顯示與運算,但儲存效率較低(4 位只表示 0-9)。