背景
在银行报文中,有很多用到BCD编码的地方,BCD编码和常见的二进制编码或者ASCII编码又有区别,所以很容易搞错,弄错概念,下面笔者就一次把BCD编码讲清楚。
一,概念
1,BCD编码,英文全称是Binary-Coded Decimal,中文名称是二进制编码的十进制数,也就是用4位二进制数来表示1位十进制数中的0~9这10个数码。
2,只有10个码,分别对应0,1,2,3,4,5,6,7,8,9 这10个数字。 这是重点,千万不要弄复杂了。
3,因为只有0到9这10个数字,所以这个BCD编码里一定不会出现A,B,C,D,E,F这些16进制才有的字符。
4,BCD编码是二进制的数字编码形式,用二进制编码表示的十进制代码,所以编码里只有0和1。
5,BCD编码是4位二进制数来表示10个十进制数,所以都是4位,就是都是4位0和1组成的编码。
二,类型
因为用4位0或者1组成代码组合有16种,但是用来表示10个数字,显然就多了,所以会有很多种组合方式,也就是有很多种BCD编码的子类型,比如8421码,2421码,5421码,余3码,余3循环码。
1,有权码
所谓有权码,就是说4位二进制码的每一位,都对应一个十进制的数值,比如8421码种,从右往左,分别对应是1,2,4,8这4个数字,如果某一位是1,就表示有这个数字,最终把这4个位上数字加起来,就表示整个8421二进制码对应的十进制数了,比如1001就是9了。
8421码
从高位到低位的权值分别为8、4、2、1 。 只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。
5421码
从高位到低位的权值分别为5、4、2、1。编码方案不是惟一的,有些十进制数,会有两个码。比如1000和0101都是表示十进制数5 。
2421码
从高位到低位的权值分别为2、4、2、1。编码方案不是惟一的,有些十进制数,会有两个码。比如1100和0110都是表示十进制数6。
2,无权码
所谓无权码,就是说4位二进制数的每一位,没有对应的数值,而是整个编码直接对应一个数字。
余3码
在8421码的基础上,加上0011(即十进制数字3),形成的码。常用于BCD码的运算电路中。
余3循环码
相邻编码只有一位变化。
三,实例
注意:5421码和2421码都有几个数字有两个码
数值 | 8421码 | 5421码 | 2421码 | 余3码 | 余3循环码 |
---|---|---|---|---|---|
0 | 0000 | 0000 | 0000 | 0011 | 0010 |
1 | 0001 | 0001 | 0001 | 0100 | 0110 |
2 | 0010 | 0010 | 0010 | 0101 | 0111 |
3 | 0011 | 0011 | 0011 | 0110 | 0101 |
4 | 0100 | 0100 |
0100 1010 |
0111 | 0100 |
5 | 0101 | 1000 0101 |
1011 0101 |
1000 | 1100 |
6 | 0110 |
0110 1001 |
1100 0110 |
1001 | 1101 |
7 | 0111 | 1010 0111 |
1101 0111 |
1010 | 1111 |
8 | 1000 | 1011 | 1110 | 1011 | 1110 |
9 | 1001 | 1100 | 1111 | 1100 | 1010 |
四,补充
压缩BCD码和非压缩BCD码
压缩BCD码的每一位十进制数用4位二进制表示,一个字节(8位)表示两位十进制数。
例如:10010110表示十进制数96。
非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9。
例如:00001000表示十进制数8.