简介
- 在计算机中采用4位二进制码对每个十进制数位进行编码。
- 4位二进制码有16中不同的组合,从中选出10种来表示十进制数位的0~9,有多种方案可供选择,下面介绍最常用的几种。
1 有权码
- 表示一位十进制数的二进制码的每一位有确定的权。
- 一般用8421码,其4个二进制码的权从高到低分别为8、4、2 和 1.
- 用0000、0001、···、1001 分别表示0、1、···、9,每个数位内部满足二进制规则,而数位之间满足十进制规则,故称这种编码为“以二进制编码的十进制码”(binary coded decimal,BCD).
十进制 | 二进制 |
---|---|
0 | 0000 |
7 | 0111 |
12 | 0001 0010 |
13 | 0001 0011 |
127 | 0001 0010 0111 |
234 | 0010 0011 0100 |
1.1 BCD码加法运算修正规则:
-
如果两个一位BCD码相加之和小于或等于(1001)2,即(9)10,不需要修正;
-
如果相加之和大于或等于(10)10,要进行加6修正,并向高位进位,进位可以在首次相加或修正时产生。
1 + 8 = 9 4 + 9 = 13 9 + 7 = 16 0 0 0 1 0 1 0 0 1 0 0 1 + 1 0 0 0 + 1 0 0 1 + 0 1 1 1 ————————————————— ————————————————— ————————————————————— 1 0 0 1 1 1 0 1 1 0 0 0 0 不需要修正 + 0 1 1 0 修正 + 0 1 1 0 修正 ————————————————————— ————————————————————— 1 0 0 1 1 1 0 1 1 0
1.2 BCD码加6修正的由来
十进制 | 二进制 | BCD码 | 二进制差值 |
---|---|---|---|
10 | 1010 | 1 0000 | 0110 |
11 | 1011 | 1 0001 | 0110 |
12 | 1100 | 1 0010 | 0110 |
13 | 1101 | 1 0011 | 0110 |
14 | 1110 | 1 0100 | 0110 |
15 | 1111 | 1 0101 | 0110 |
16 | 1 0000 | 1 0110 | 0110 |
17 | 1 0001 | 1 0111 | 0110 |
18 | 1 0010 | 1 1000 | 0110 |
19 | 1 0011 | 1 1001 | 0110 |
说明:两个十进制一位数相加的结果小于或等于19,在[10, 19]范围内,每一个十进制数的BCD码都比二进制码小了6,换算成二进制码,也就是0110.
2 无权码
表示一个十进制数位的二进制码的每一位没有确定的权。使用较多的是余3码(Excess-3 Code)和格雷码(Gray Code),格雷码又称“循环码”。
十进制 | 余3码 | 格雷码(1) | 格雷码(2) |
---|---|---|---|
0 | 0011 | 0000 | 0000 |
1 | 0100 | 0001 | 0100 |
2 | 0101 | 0011 | 0110 |
3 | 0110 | 0010 | 0010 |
4 | 0111 | 0110 | 1010 |
5 | 1000 | 1110 | 1011 |
6 | 1001 | 1010 | 0011 |
7 | 1010 | 1000 | 0001 |
8 | 1011 | 1100 | 1001 |
9 | 1100 | 0100 | 1000 |
2.1 余3码
在8421码的基础上,把每个编码都加上0011而形成的,如上表所示。
2.1.1 加法规则
-
当两个余3码相加不产生进位时,应从结果中减去0011;
-
产生进位时,应将进位信号送入高位,本位加0011。
(28)~10~ + (55)~10~ = (83)~10~ 0 1 0 1 1 0 1 1 (28)~10~ +) 1 0 0 0 ~1~ 1 0 0 0 (55)~10~ ———————————————————————————————————————————————— 低位向高位产生进位,高位不产生进位。 1 1 1 0 0 0 1 1 -) 0 0 1 1 +) 0 0 1 1 ———————————————————————————————————————————————— 低位+3,高位-3。(0011)~2~ = (3)~10~ 1 0 1 1 0 1 1 0
二进制的(1010)2需要借助(0110)2才能完成BCD码的进位,造成相加结果少了6,也就是加数和被加数都少了3,所以相加结果需要加3得到余3码。
2.2 格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。
若不作特别说明,格雷码就是指典型格雷码,它可从自然二进制码转换而来。
优点:从一个编码变到下一个相邻编码时,只有1位发生变化。
特点:
- 格雷码属于可靠性编码,是一种错误最小化的编码方式。因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于方向的转角位移量-数字量的转换中,当方向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性;
- 格雷码是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便;
- 由于格雷码是一种变权码,每一位码没有固定的大小,很难直接进行比较大小和算术运算,也不能直接转换成液位信号,要经过一次码变换,变成自然二进制码,再由上位机读取;
- 典型格雷码是一种采用绝对编码方式的准权码,其权的绝对值为2i-1(设最低位i=1);
- 格雷码的十进制数奇偶性与其码字中1的个数的奇偶性相同。
2.2.1 格雷码编码方法
2.2.1.1 递归生成码表
这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造:
- 1位格雷码有两个码字;
- (n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0;
- (n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1;
- n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1。
1位格雷码 | 2位格雷码 | 3位格雷码 | 4位格雷码 |
---|---|---|---|
0 | 00 | 000 | 0000 |
1 | 01 | 001 | 0001 |
11 | 011 | 0011 | |
10 | 010 | 0010 | |
110 | 0110 | ||
111 | 0111 | ||
101 | 0101 | ||
100 | 0100 | ||
1100 | |||
1101 | |||
1111 | |||
1110 | |||
1010 | |||
1011 | |||
1001 | |||
1000 |
2.2.1.2 异或转换
将二进制码从右向左依次编号为0,1,2,···,n-1。
二进制码–>格雷码:
G~i~ = B~i~ xor B~i+1~,i = 0,···,n-1,令B~n~ = 0
格雷码–>二进制码
G~i~ = B~i~ xor B~i+1~,i = n-1,···,0,令B~n~ = 0
2.2.1.3 卡诺图
- 将卡诺图变量分为两组,变量数目相近(最好相等)
- 以逻辑变量高位在左低位在右建立卡诺图
- 从卡诺图的左上角以之字形到右上角最后到左下角遍历卡诺图,依次经过格子的变量取值即为典型格雷码的顺序
三位格雷码(建立在二位格雷码基础上)
AB\C | 0 | 1 |
---|---|---|
00 | 000 --> | 001 |
01 | 010 | <-- 011 |
11 | 110 --> | 111 |
10 | 100 | <-- 101 |
四位格雷码(建立在三位格雷码基础上)
AB\CD | 00 | 01 | 11 | 10 |
---|---|---|---|---|
00 | 0000 --> | 0001 --> | 0011 --> | 0010 |
01 | 0100 | <-- 0101 | <-- 0111 | <-- 0110 |
11 | 1100 --> | 1101 --> | 1111 --> | 1110 |
10 | 1000 | <-- 1001 | <-- 1011 | <-- 1010 |
2.2.1.4 使用异或乘除
用异或代替加减进行二进制竖式乘除,称为异或乘除,它的特点是无进退位。
如:10101除以11将变成1100余1。
二进制转格雷码:
只要异或乘以二分之三,即二进制的1.1,然后忽略小数部分;也可以理解成异或乘以三(即11),再右移一位。
格雷码转二进制:
异或乘以三分之二,即除以1.1,忽略余数;或者左移一位,再异或除以三,忽略余数。