二进制转BCD 加三移位法(网上是这么叫的)
1. 为什么不用除法或者取余?
除法取模占用资源太多。
2. 加三移位法的原理(自己的理解)
二进制想要转成BCD码,关键就是其转换为十进制后分离其各个位,每一位用4位二进制表示即可。
如果不转换成十进制如何将其表示为BCD码?
4位二进制最高表示15 BCD码4位最高表示9
那么如果4位二进制大于9了就向前进一(加6),不就是BCD码了么
好多位的二进制用以上算法循环好多次就变成BCD了
至于加三移位法 加了3移位 == 移位后加6 前者占用资源相对少些
由于向左移位 所以从高位到低位循环判断
先判断是否大于等于5 即可判断移位后是否大于等于10
也可以 先判断是否大于4 即可判断移位后是否大于9
大于的话就加3使其进一 让其保持在小于等于9(BCD)的状态
到最后四位的时候无需判断 如果判断就错了 最后四位不会移位了 要判断也是其是否大于9 且前面都判断过了 最后四位一定不会大于9
why ?(如果大于9 即前三位至少是大于4的(5,6,7) 但是大于4会加三使其进一(0,1,2)即时加上最后一位也不可能大于9)
感谢这位博主
http://blog.youkuaiyun.com/li200503028/article/details/19507061
例子以上网址里有 或者百度 详细的公式的话可以搜相关论文