BCD码与十进制数之间的代码转换,一文搞懂!

一、BCD码介绍

BCD码(Binary-Coded Decimal‎)称为二进码,用4位二进制数来表示1位十进制数中的0~9这10个数码。是十进代码中最常用的一种。

在这种编码方式中,每一位二值代码的“1”都代表一个固定数值。将每位“1”所代表的 二进制数加起来就可以得到它所代表的十进制数字。因为代码中从左至右看每一位“1”分别代表数字“8”“4”“2”“1”,故得名8421码。其中每一位 “1”代表的十进制数称为这一位的权。因为每位的权都是固定不变的,所以8421码是恒权码

BCD码可分为有权码和无权码两类:

BCD码与十进制数之间的代码转换,一文搞懂!-第1张图片-IT技术视界

  1. 有权BCD码有8421码、2421码、5421码,其中8421码是最常用的BCD码。
  2. 无权BCD码有余3码,余3循环码等。

类比8421BCD码 可以得到 5421码 2421码

由此可知 8421码 5241码和2421码 都是 十进代码 只是最右面位的权值不同

BCD码与十进制数之间的代码转换,一文搞懂!-第2张图片-IT技术视界

图中可以看到0-9位 几个进制的BCD码都是以二进制的正常形式换算,从十开始的BCD码开始不一样了起来

注意这里容易混淆

BCD码将每个十进制数字单独编码为四位二进制数。例如,10的BCD码是0001 0000,表示1和0,组合起来就是十进制的10。11的BCD码是0001 0001,表示1和1,组合起来就是十进制的11。

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
THE END