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,这样就可以使得定义变得唯一确定。