BCD 码完全指南:二进制编码十进制是怎么把数字一位一位编出来的
BCD 把每个十进制位单独编成 4 位二进制,和纯二进制完全不是一回事。本文讲清 8421 码、和二进制的区别、数码管与金融代码为什么离不开它,并带一个真实转换例子。
BCD 码完全指南:二进制编码十进制是怎么把数字一位一位编出来的
很多人第一次见到 BCD 都会愣一下:明明已经有二进制了,为什么还要再发明一套编码来表示数字?答案藏在一个细节里,BCD 不是把整个数转成二进制,而是把每个十进制位单独编码。理解了这一点,数码管、电子钟、金融寄存器里那些看着奇怪的位串就全部讲得通了。
每位十进制 = 4 位二进制
BCD 的全称是 binary coded decimal,二进制编码十进制。它的规则只有一条:把十进制数的每一位,各自用 4 位二进制表示。
为什么是 4 位?因为十进制单个位的取值是 0 到 9,而 4 位二进制能表示 0 到 15,刚好够装下 0 到 9,还多出 6 个用不到的组合。这套权重 8、4、2、1 的编码就叫 8421 码,也是最常见的 BCD 形式。数字 7 是 0111,也就是 4 + 2 + 1;数字 9 是 1001,也就是 8 + 1。
关键就在这里:1010 到 1111 这六个组合,在合法的 8421 BCD 里永远不会出现。看到它们,要么数据对齐错了,要么那串根本不是 BCD 而是纯二进制。一个靠谱的转换工具应该直接报错,而不是猜一个值塞给你。
一个真实例子:十进制 59 怎么变成 BCD
拿十进制 59 走一遍流程,你就彻底明白了。
把 59 拆成两位:5 和 9。然后每位单独编 4 位二进制。
- 数字 5 编成 0101(也就是 4 + 1)
- 数字 9 编成 1001(也就是 8 + 1)
拼起来,59 的 BCD 就是 0101 1001,紧凑写法是 01011001。注意这两个 4 位组各管各的:左边那组只表示 5,右边那组只表示 9,它们之间没有进位、没有相互影响。这跟纯二进制完全不同,纯二进制里 59 是 111011,整串绑在一起,你没法从中间切一刀对应回某个十进制位。
想自己多试几个数,可以直接用 BCD 转换器,填十进制就出分组、紧凑、十六进制和逐位对照表,反过来粘 BCD 位串它也能解回十进制并挡掉非法组。
BCD 和纯二进制到底差在哪
这是最容易混的地方,放在一起对比就清楚了。还是用 1995 这个数。
纯二进制把整个数一次转完:1995 是 11111001011,只要 11 位。BCD 一位一位编:1 是 0001,9 是 1001,9 是 1001,5 是 0101,合起来 0001 1001 1001 0101,要 16 位。
差别一目了然。BCD 更占空间,因为每个 4 位组最多只到 9,白白浪费了 10 到 15 这一段表示能力。但它换来两个好处:一是十进制保持精确,不沾二进制的舍入误差;二是打印和显示极其方便,因为每位都能独立取出来。纯二进制省位,可代价是像 0.1 这样的小数存进去就避不开舍入。
如果你需要的恰恰是把整个数在二进制、八进制、十六进制之间互转,那应该用 进制转换器,它处理的是整数的完整进制变换,和 BCD 的逐位编码是两套思路。
数码管、时钟、金融代码为什么离不开 BCD
讲到用途,有三个经典场景几十年来一直在用 BCD,不是因为它老,而是因为它的特性正好对口。
第一是数码管和电子钟。这类显示一次驱动一位,译码芯片要的就是每位一个 BCD 组,一个 4 位组直接对上一个显示位,中间不用做除法和取模。我自己第一次用单片机点亮一块多位数码管时,正是卡在这一步:原本想用纯二进制硬算每位,结果除法和取余写得满头大汗。后来改成 BCD,把数字一拆,每个 4 位组抄到对应的显示位,代码瞬间清爽,显示也再没错过位。那一刻我才真正体会到,编码方式选对了,后面的活能省一大半。
第二是实时时钟芯片。RTC 把时、分、秒用压缩 BCD 存着,所以你读到 0010 0011 别急着当成 35,它其实是 23。
第三是金融和计算器代码。金额涉及到分位,必须分毫不差,而二进制浮点存 0.10 这样的值会漂移。用 BCD 存,10 分永远是 0001 0000,稳稳当当,这也是很多老牌财务系统坚持用它的原因。
怎么动手转换
手算其实不难,记住三步就行:十进制拆成单个位、每位查成 8421 的 4 位码、按原顺序拼起来。反向解码就是每 4 位切一组、读回数字、再拼成十进制,遇到 1010 到 1111 就停下来检查数据。
要点提醒:BCD 的总位数一定是 4 的倍数,如果出现 5 位、7 位这种没法整除 4 的串,八成是少补了零或者切错了边界。解码前先确认每组都凑满 4 位。
数字一多手算容易出错,直接交给工具更稳。除了上面提到的两个,如果你在研究位运算本身,位运算计算器 能帮你看清每一位的与、或、异或、移位结果,和理解 BCD 的逐位思路正好互补。
BCD 不是什么高深的东西,它只是用空间换精确和易读。搞懂"每位十进制各占 4 位二进制"这一句,剩下的全是顺理成章。
Made by Toolora · Updated 2026-06-13