BCD码实际上就是将原本的十进制数的每一位用一个4位二进制数表示,每一位0-9。
二进制4位能够表达的数字范围是0-15。
由此可见BCD码的一段与普通四位二进制来表示十进制位有6的进制差。所以这就是二进制转化为BCD码的关键所在。下面来讲讲主要步骤:
- 先预估十进制数的位数,预先给BCD码分好段,此时的BCD码为空无任何数据
- 接着讲原本的二进制数的最高位一端从BCD码的最低位端插入,也可以看作是将二进制数与BCD码同时左移每次将二进制的头砍掉补到BCD码最后,但个人觉得逐位插入更加形象~
- 关键来啦,之前提到过BCD码每一个四位二进制(表示十进制的一位)存储范围是0-9,而原本的二进制四位的存储范围是0-15,所以二进制在逐位后端插入BCD码时,若BCD码的某一段(四位二进制)>9 则我们手动给该段+6强行使其进位满足BCD码的存储范围的要求--简单的说就是一直同时左移,某一段>9就+6。
- 这里可以进行优化,就是常用的+3(+011)左移法,即在左移之前先判断本段是否>4(>0100),若大于则左移之后必然会超过9,所以在左移之前先在该段+3(+011),那么左移之后就已经实现了进位啦。
- 就这么一直将二进制逐位从底端插入(左移),同时保持每段的范围在0-9内最终就能得到BCD码聊。