1.BCD码的原理
BCD
码(Binary-Coded Decimal)是一种用二进制数来编码十进制数字的方式。BCD
码使用4位二进制数来表示一个十进制数的每一位。
2.8421码映射
8421
码是BCD
码的一种实例化。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 |
因此132
可以表示为0001 0011 0010
,其中8421
码没有1010~1111
的定义(也就是10~15
)。那么如果进行计算+
运算呢?
5 + 8 = 13
就可以先直接0101 + 1000 = 1101
,但是BCD
码没有1101
定义怎么办呢?可以在原二进制值+6
来进行进位修正。即:1101 + 0110 = 1 0011 = (13)10
。
9 + 9 = 18
即:1001 + 1001 = 1 0010
而1 0010
本身不再BCD
码的定义范围内,因此也需要+0110
,最终结果为1 1000 = (18)10
补充:由于
BCD
码只使用了4bit
位组中的10个定义,还剩下了6个定义没有被使用,因此如果我们修改映射方案就可以得到不同的编码规则。
3.余3码映射
在8421
码的基础上,每个码值的定义都加上0011
(十进制为3)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 |
4.2412码映射
这种映射方案直接改变了权值,把8421
对应的二进制权值修改为2421
,因此码值的映射关系如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 1011 | 1100 | 1101 | 1110 | 1111 |
但是这种编码方案有一个问题,比如5
有两种表示方法0101
和1011
,因此我们还额外规定0~4
的第一位二进制位是0
,5~9
的第一位二进制位是1
,这样就可以使得定义变得唯一确定。