二进制码 ----》 格雷码(编码):
从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0)。
格雷码的是特点是:
相邻两数的格雷码,仅仅有一位二进制发生变化。
而且在其范围内的最小值和最大值,也仅仅有一位二进制发生变化。
例如下面两数:
最小:二进制0000=格雷码0000
最大:二进制1111=格雷码1000
看到了吧,0000 和1000,仅仅有一位数发生变化。
-------
如果在变换的过程中,先把十进制转换成BCD码,这就失去了格雷码的特点。
因为在BCD码中:
最小:二进制0000=格雷码0000
最大:二进制1001=格雷码1101
可以看出,它们之间有三位发生变化。
通过BCD码来变换格雷码,思路不对。变换出来的,并不是原数的格雷码。
自然二进制数转换到格雷码
------------
设有 N 位二进制数 B(i),其中 0 《= i 《= N - 1;它可以变换成为同样位数的格雷码 G(i)。
二进制数与格雷码的转换公式如下:
G(i) = B(i+1) XOR B(i) ; 0 《= i 《 N - 1
G(i) = B(i) ; i = N - 1
如果是通过编程计算进行变换,就需要使用这个公式逐位的计算;
如果是使用硬件电路进行变换,就可以使用做而论道前面在回答问题时给出的电路。
格雷码转换到自然二进制数
------------
设有 N 位格雷码 G(i),把它转换成自然二进制数的算法如下。
自然二进制码的最高位等于雷码的最高位;
自然二进制码的次高位为最高位自然二进制码与次高位格雷码相异或;
自然二进制码的其余各位与次高位自然二进制码的求法相类似。
转换公式如下:
B(i) = G(i) ; i = N - 1
B(i) = B(i+1) XOR G(i) ; 0 《= i 《 N - 1