格雷码与二进制代码的转换规则 一、什么是格雷码? 首先我们来了解一下格雷码。前面我们介绍了一些常见的 BCD 码, 8421BCD、 2421BCD、 5421BCD, 还有余三码, 那么这个格雷码我们接触较少, 什么是格雷码呢?这种码是一个叫弗兰克*格雷的人在 1953 年发明的,最初用 于通信。 格雷码,又叫循环二进制码或反射二进制码,它的基本的特点就是任意两 个相邻的代码只有一位二进制数不同, 这点在下面会详细讲解到。 在数字系统中, 常要求代码按一定顺序变化。例如,按自然数递增计数,若采用 8421 码,则数 0111 变到 1000 时四位均要变化,而在实际电路中,4 位的变化不可能绝对同时 发生,则计数中可能出现短暂的其它代码(1100、1111 等) 。在特定情况下可 能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。格雷码属于可 靠性编码,是一种错误最小化的编码方式。 举个例子来说吧, 如果用一个 8 位的二进制数表示热水壶的温度, 温度是不 断连续变化的,36°C、37°C、38°C......,那么温度每升高一度,二进制数就加 1。这时候,二进制数有可能是多个位同时变化的:当温度由 119°C 变成 120° C 时,二进制数由 01110111 变化成 01111000,有四个位发生变化;当二进制 数由 177°C 变化成 178°C 时,二进制数由 01111111 变化成 10000000,有8个位发生了变化。也就是说,自然二进制数在表示一个连续变化的数值时,可能 会有多个位同时发生变化,每个位翻转(变化)的频率是比较高的,这在某些应 用场合,是十分不利的。而格雷码,由于具有循环特性和单步特性,当用它表示 一个连续变化的数值时,仅有一个位会翻转,大大的降低了位翻转的频率,因而 可以保证传输的稳定性,较少传输误码率。格雷码的单步特性呢就是是指,当格 雷码表示的一个数值,连续变化时,格雷码只有一个位会变化。就是我刚才说的 它最基本的特点了。还有格雷码的单步特性是指,当格雷码表示的一个数值,连 续变化时,格雷码只有一个位会变化。看表,1000 变到 0000,格雷码只有一位 翻转。 二、格雷码与二进制码转换规则 十进 制数 0 1 2 3 4 5 6 7 自然二进制数 0000 0001 0010 0011 0100 0101 0110 0111 格雷码 0000 0001 0011 0010 0110 0111 0101 0100 十进制数 8 9 10 11 12 13 14 15 自然二进制数 1000 1001 1010 1011 1100 1101 1110 1111 格雷码 1100 1101 1111 1110 1010 1011 1001 1000 大家看一下这个表,有没有发现二进制转为格雷码的规律?看上去,格雷码 似乎很乱,不像 8421 码那样连续的。我们记 8421 码的时候很轻松,因为它每 位的值都是固定的数, 有位权。 那么我们怎么记格雷码呢?死背真值表?当然了, 这是一种方法,有能力又勤奋的同学可以用这种方法。不过呢,很多东西都是有 它独特的规律的, 格雷码也不例外。 现在我们先来看二进制转换为格雷码的过程, 也就是编码。 最初就说了,格雷码的基本特点就是任意两个相邻的代码只有一位二进制 数不同,这点很重要。现在,我们在来看二进制码转格雷码的另一种方法,这种 方法用文字来表述就是: 从最右边一位起, 依次将每一位与左边一位异或(XOR), 作为对应格雷码该位的值,最左边一位不变(相当于左边是 0)。举个例子吧: 二进制的 0110 第一步、二进制最右边 0 和它左边的 1 异或,得到 1,这就是格雷码的最 右边的数; 第二步、二进制右边第二位的 1 与它左边的 1 异或,得到 0,这就是格雷 码右边的第二位数; 第三步、二进制右边第三位数 1 与它左边的 0 异或,得到 1,这就是格雷 码的右边第三位; 最后,保持最高位不变 就得到了格雷码 0101,看,就这样简单。 再来看格雷码转换为二进制码,也就是解码的过程。解码是编码的逆过程, 理解了编码,解码就好理解了。解码从左边第二位起,将每位与左边一位解码后 的值异或,作为该位解码后的值(最左边一位依然不变),记住啊,最高位,也就 是最左边的一位依然是不变的,和编码是一样的。我们来看看这个公式: 看,有了这个规则,格雷码就 so easy 了!