为什么格雷码是二进制代码中的独占或位

时间:2012-10-14 17:03:09

标签: binary gray-code

我清楚地理解了格雷码的目的。 EE Times: Gray Code Fundamentals

但我无法从概念上理解为什么可以生成灰色代码,如下所示

G i = B i + 1 ⊕B i ,i = n - 1 ,. 。 。 ,0,其中B n 取0。

有人可以从概念上帮助我。

3 个答案:

答案 0 :(得分:1)

在标准二进制文件中,如果您使用n**2进行异或或小于n**2-1的数字,则可以有效地颠倒该计数的顺序:

x   x^11
00  11
01  10
10  01
11  00

因此,对于一个两位数字,如果我们使用下一位的独占或底部位:

x   x^(x>>1)
00  00
01  01
10  11
11  10

我们交替颠倒底部位的计数顺序,具体取决于它上面的位是置位还是清零。这确保了当位1改变时,位0保持不变(否则它将回绕到零并开始重新计数)。

对于在计数器顶部添加的每个位,我们需要重复下面位的计数反映,以确保在新位置位时它不会被清零。其余的位遵循相同的模式,由它们上方的位反映,使得它们向后计数而不是环绕。

答案 1 :(得分:0)

当您查看维基百科时,您会看到它是:

G0 = B0
Gi = Bi EXOR Gi-1

这更有意义吗? 检查一下你读过的页面中给出的Graycodes - 你会看到它存在。

您是否希望看到上述证据,或者正在查看示例?

答案 2 :(得分:0)

我发现Vovaniumanswer对于理解生成格雷码序列的公式非常有帮助。这个想法是我们要生成一个序列,其中G(n + 1)仅从G(n)改变一位,即G(n + 1)x或G(n)仅设置1位。 Vovanium的答案部分复制在下面。

如果查看二进制计数序列,则会注意到,相邻代码在最后几个位(无孔)有所不同,因此,如果对它们进行异或运算,则会出现几个尾随1的模式。同样,当您右移数字时,xor也将右移:(A xor B)>> N == A >> N xor B >> N。

        N                    N>>1                  gray
 0000           .        0000           .      0000           .
    | >xor = 0001             >xor = 0000           >xor = 0001
 0001          .         0000          .       0001          .
   || >xor = 0011           | >xor = 0001           >xor = 0010
 0010           .        0001           .      0011           .
    | >xor = 0001             >xor = 0000           >xor = 0001
 0011         .          0001         .        0010         .
  ||| >xor = 0111          || >xor = 0011           >xor = 0100
 0100                    0010                  0110

原始Xor结果和移位结果在单个位上有所不同(我在上面用点标记了它们)。这意味着,如果对它们进行异或运算,将获得设置了1位的模式。因此,

(A xor B) xor (A>>1 xor B>>1) == (A xor A>>1) xor (B xor B>>1) == gray (A) xor gray (B)