一、格雷码(Gray Code)的概念
格雷码是我们在工程中常会遇到的一种编码方式,例如,大多数绝对型旋转编码的输出就是采用格雷码的编码格式。它是一种非加权码,由二进制码派生而来。常用的二进制数与格雷码间的转换关系如下表:
数值
二进制码
格雷码
数值
二进制码
格雷码
0
0000
0000
9
1001
1101
1
0001
0001
10
1010
1111
2
0010
0011
11
1011
1110
3
0011
0010
12
1100
1010
4
0100
0110
13
1101
1011
5
0101
0111
14
1110
1001
6
0110
0101
15
1111
1000
7
0111
0100
8
1000
1100
与普通二进制编码相比,格雷码的特点是相邻两个数之间只有 1 个二进制位发生了变化。正是这个特点,使它更适合于用在数据传输的场合。
(一)、二进制码转为格雷码
二进制码转为格雷码的算法较简单,将所需转换的数的二进制码右移一位后与原数相异或即可。
例:十进制数 9 的格雷码为:
(二)、格雷码转为二进制码格雷码转为二进制码的算法则较为繁琐,计算公式如下:
Rn 为 n 位的格雷码,Cn 为转换后的二进制码Cn = Rn, Cn-1 = Rn⊕Rn-1,
Cn-2 = Rn⊕Rn-1⊕Rn-2, ... C1 = Rn⊕Rn-1⊕Rn-2⊕...⊕R2⊕R1,C0 = Rn⊕Rn-1⊕Rn-2⊕...⊕R2⊕R1⊕R0
例:格雷码(1001)转位二进制数
C4= C4=R4 C4=1 C3= R4⊕R3= C4⊕R3=1⊕0 C3=1 C2= R4⊕R3⊕R2= C3⊕R2=1⊕0 C2=1 C1= R4⊕R3⊕R2⊕R1= C2⊕R1=1⊕0 C1=0
规律就是最高位与最高位相等,接下去用当前位的格雷码值与上次的结果作异或,得到每一位二进制的结果