本文主要是介绍BCD与十进制转换的算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
BCD是指用二进制来表示十进制数的编码,即用4位二进制来表示一个十进制数,因此4位二进制数表示最大的十进制数9(1001),只取十六个数中的十个数(有别于8421码)。
为了表示两个十进制数(十位、个位),需要两个BCD码(8位),可以用char 类型来储存,比如:
BCD码:0x99 (153),共八位,储存在char 类型中,它对应的二进制为1001 1001.该BCD码要转换成十进制数99。
算法应该是这样子的:
153 - 99= 54
54 - 9*N = 0 ----> N = 6
(这些只是验证,知道了算法再去推,感觉有点奇怪,现在还是弄不明白,不过这种算法确实很简洁!)
--------------------神奇的分割线---------------------
这算法有点明白了。十进制数是指逢十进一,而十六进制则是逢十六进一,它们之间每次进位差了6,因此要把一个BCD转换成一个十进制的数,先算清多进位的位数,比如0x99,它多进位9次(十位数),那它就多加了9次6,要转换成十进制,只需用0x99 - 9*6 即可。
很巧妙的算法,利用了十进制与十六进制之间的本质区别。
-----------------------------------------------
static unsigned char bcd_decimal(unsigned char bcd)
{
return bcd-(bcd >> 4)*6;
}
static unsigned char decimal_bcd(unsigned char decimal)
{
return (unsigned char) (decimal+(decimal / 10)*6);
}
这篇关于BCD与十进制转换的算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!