一、BCD码介绍
BCD码(Binary-Coded Decimal)称为二进码,用4位二进制数来表示1位十进制数中的0~9这10个数码。是十进代码中最常用的一种。
在这种编码方式中,每一位二值代码的“1”都代表一个固定数值。将每位“1”所代表的 二进制数加起来就可以得到它所代表的十进制数字。因为代码中从左至右看每一位“1”分别代表数字“8”“4”“2”“1”,故得名8421码。其中每一位 “1”代表的十进制数称为这一位的权。因为每位的权都是固定不变的,所以8421码是恒权码
BCD码可分为有权码和无权码两类:
- 有权BCD码有8421码、2421码、5421码,其中8421码是最常用的BCD码。
- 无权BCD码有余3码,余3循环码等。
类比8421BCD码 可以得到 5421码 2421码
由此可知 8421码 5241码和2421码 都是 十进代码 只是最右面位的权值不同
图中可以看到0-9位 几个进制的BCD码都是以二进制的正常形式换算,从十开始的BCD码开始不一样了起来。
BCD码:以四位二进制数为一单位来表示一个数。例如:十进制数10的BCD码为0001 0000;显而易见后四位的0000 表示的是十进制的个位,0001则就是十位了。十六进制转BCD码也是同理。
二、BCD 码与十进制间转换
8421码转十进制数
unsigned char bcd_to_hex(unsigned char data)
{
unsigned char temp;
temp = ((data>>4)*10 + (data&0x0f));
return temp;
}
十进制数转8421码
unsigned char hex_to_bcd(unsigned char data)
{
unsigned char temp;
temp = (((data/10)<<4) + (data%10));
return temp;
}
附:几种码制之间的转换关系
十进制数 | 二进制 | 8421码 | 5421码 | 2421码 | 余三码 | 余三循环码 |
---|---|---|---|---|---|---|
0 | 0000 | 0000 | 00000 | 0000 | 0011 | 0010 |
1 | 0001 | 0001 | 0001 | 0001 | 0100 | 0110 |
2 | 0010 | 0010 | 0010 | 0010 | 0101 | 0111 |
3 | 0011 | 0011 | 0011 | 0011 | 0110 | 0101 |
4 | 0100 | 0100 | 0100 | 0100 | 0111 | 0100 |
5 | 0101 | 0101 | 1000 | 1011 | 1000 | 1100 |
6 | 0110 | 0110 | 1001 | 1100 | 1001 | 1101 |
7 | 0111 | 0111 | 1010 | 1101 | 1010 | 1111 |
8 | 1000 | 1000 | 1011 | 1110 | 1011 | 1110 |
9 | 1001 | 1001 | 1100 | 1111 | 1100 | 1010 |