码迷,mamicode.com
首页 > 其他好文 > 详细

Binary 转 BCD 码

时间:2020-02-21 00:07:05      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:com   ESS   alt   ccm   net   algorithm   进制转换   double   位长   

在数字电路中,经常会遇到进制转换问题,如二进制 (Binary) 转 BCD (Binary-Coded Decimal)。针对这种数制的转换,有个很神奇的算法——double dabble algorithm,也称为 shift and add 3 algorithm

其主要流程如下(摘自wiki-Double_dabble):
Performed on the value 2431024310, looks like this:
技术图片

但是为何这样工作就能得到BCD码呢?

我们考虑两个BCD码的加法 1001|0111 与 1000|0110,低四位 0111 与 0110 相加的结果是1101,这是一个不合法的BCD码,我们需要对它进行调整:加6 (0110),所得结果为 1|0011 。

在 double dabble 算法中,我们从最高位开始进行移位,相当于一个“原数×2 + 新数”的过程,想象成十进制的过程更好理解:134 = ((1×10)+3)×10+4 。
在算法的移位过程中,就有一个旧的BCD码数,我们对这个BCD码×2 (相当于 BCD码+BCD码),若乘2后某位(二进制4位长度)结果大于9,则超出合理的BCD码位置,我们就要对其进行加6调整。如若,在乘法前,判断出该位数大于4 (>=5),那么我们就对其进行加三调整,不就和上面过程结果一致了吗!(补充:乘2前<=4,则乘2后<=8,新数只能是1或者0,因此原数×2 + 新数<=9,是始终满足BCD码的条件的)

最后一次移位完就不需要满5加3了,因为此时已经满足了BCD码的条件,且后续不需要移位。

参考文献:

本文转载于https://qqdaiyu55.github.io/2015/11/26/convert-bin-to-BCD/

Binary 转 BCD 码

标签:com   ESS   alt   ccm   net   algorithm   进制转换   double   位长   

原文地址:https://www.cnblogs.com/ucprer/p/12339648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!