BIN转BCD
BCD代码,Binary-Coded Decimal,是一种二进制的数字编码形式,用二进制编码的十进制代码。这种编码形式利用了四个位元来储存一个十进制数,使二进制和十进制之间的转换得以快捷的进行。常见BCD编码有8421 BCD码,2421 BCD码,余3码。我们要说的就是8421 BCD码与二进制的转换,为简便叙述,简称8421 BCD码为BCD码。
BCD与BIN对应编码关系如下:
十进制数字 | BIN | BCD |
0 | 0000 | 0000 |
1 | 0001 | 0001 |
2 | 0010 | 0010 |
3 | 0011 | 0011 |
4 | 0100 | 0100 |
5 | 0101 | 0101 |
6 | 0110 | 0110 |
7 | 0111 | 0111 |
8 | 1000 | 1000 |
9 | 1001 | 1001 |
10 | 1010 | |
11 | 1011 | |
12 | 1100 | |
13 | 1101 | |
14 | 1110 | |
15 | 1111 |
对于二进制来说,大于1111 B就进位;对于BCD来说,是大于1001 B就进位。通俗的讲,BIN是逢16进1,BCD是逢10进1。
利用除法和求余实现BIN转BCD
这是一种非常容易理解的算法。利用除法和求余运算将每一位都提取出来。
例如:
325 ----> 0x 325 (BCD)
a = 325/100 = 3
b = (325%100)/10 = (325-a*100)/10 = 2
c = 325%100%10 = 325-a*100-b*10 = 5
这种算法对于没有乘除法指令的低速单片机来说,实现起来比较复杂,耗时较多。
反过来,要将BCD转成BIN时,先取出每一位,再分别与10,100,1000等相乘。
0x 325 ----> 325
a = 0x325>>8;
b = 0x325 >>4;
c = 0x325&0x00F
325=a*100+b*10+c
利用加法实现BIN转BCD
BIN是逢16进1,BCD是逢10进一。
计算机里的数都是二进制表示的,对于任意一个十进制数,可以表示为:
对于BCD而言:
举例来说:
49 = 4*10 + 9
0x49 = 4*16+9 = 4*(10+6)+9 =49+4*6
325 = 3*100+2*10+5
0x325 = 3*256+2*16+5 = 3*(100+156)+2*(10+6)+5 = 3*156+2*6+325
实际应用中,最为常见的还是两位十进制到两位BCD之间的转换,即:
很明显:
反过来,要将BCD转成BIN,即
,有:
“移位,加3”算法实现BIN转BCD
这种算法通常用于cpld,fpga等
以8位BIN转3位BCD来说明算法流程:
1、左移二进制数
2、如果BCD码的某个部分>4,那么给该部分+3。例如,如果个位>4,则给个位+3。
3、如果左移了8次,转换结束;否则转向步骤1。