格雷码与二进制码转化成格雷码

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),格雷码由0和1组成,由二进制码演化而成。

格雷码生成方法如下:

  1. 1位格雷码有两个码字
  2. (n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
  3. (n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1

举例如下:

1位格雷码:

0

1

2位格雷码:

总共有2^2个码字,前一半的码字为1位的格雷码按顺序书写加前缀0,后一半的码字为1位格雷码逆序书写加前缀1,结果如下:

00

01

11

10

3位格雷码为:

在2位格雷码的基础上结果如下:

000

001

011

010

110

111

101

100

同理可以得出n位的格雷码。

二进制转化成格雷码:

原则是保留二进制码的最高位作为格雷码的最高位,格雷码的次高位为二进制编码的最高位和次高位相异或,格雷码的其他位和次高位的求法类似。

Binary Code :1011 要转换成Gray Code

  1011 = 1(照写第一位), 1(第一位与第二位异或 1^0 = 1), 1(第二位异或第三位, 0^1=1), 0 (1^1 =0) = 1110

  其实就等于 (1011 >> 1) ^ 1011 = 1110

原文地址:https://www.cnblogs.com/cocos2014/p/4627693.html