利用的数据结构:每列4bits
百位|十位|个位|二进制高4位|二进制低4位
二进制→BCD码
算法
- 从低到高依次判断个位、十位、百位这三列的数是否大于等于5,如果是则加3修正
- 左移整个数据结构1位
- 重复1和2步8次(重复次数取决于需要表示的数字的二进制形式最大位数,此处为8)
- 结束循环,则百位十位个位就是对应的BCD码
原理
4位二进制,大于等于16进位;4位BCD,大于等于10进位。两个相差了6。
要处理的话,判断是否大于等于10,是的话说明BCD要进位,加6使得二进制进位,这样是先移位后判断修正。
可以改一下,等价地,先判断是否大于等于5,如果是则说明在左移后会大于等于10需要进位,那么就加3,这样移位后相当于加了6,是先判断修正后移位。这样做实际上是预先判断下次移位后的情况了,所以在最后一次移位之后不会出现需要修正的情况。
BCD码→二进制
算法
- 右移整个数据结构1位
- 从低到高依次判断个位、十位、百位这三列的数是否大于等于8,如果是则减3修正(顺序其实不重要,因为减3不会对当前列以外的列产生任何影响)
- 重复1和2步8次(重复次数取决于需要表示的数字的二进制形式最大位数,此处为8)
- 结束循环,则数据结构的最后8位就是对应的二进制码