格雷码

简介

格雷码（Gray code）是由贝尔实验室的Frank Gray在1940年提出，用于在PCM（脉冲编码调变）方法传送讯号时防止出错，并于1953年三月十七日取得美国专利。格雷码是一个数列集合，相邻两数间只有一个位元改变，为无权数码，且格雷码的顺序不是唯一的。

格雷码能避免讯号传送错误的原理

传统的二进制系统例如数字3的表示法为011，要切换为邻近的数字4，也就是100时，装置中的三个位元都得要转换，因此于未完全转换的过程时装置会经历短暂的，010,001,101,110,111等其中数种状态，也就是代表着2、1、5、6、7，因此此种数字编码方法于邻近数字转换时有比较大的误差可能范围。葛雷码的发明即是用来将误差之可能性缩减至最小，编码的方式定义为每个邻近数字都只相差一个位元，因此也称为最小差异码，可以使装置做数字步进时只更动最少的位元数以提高稳定性。
数字0～7的编码比较如下：
十进制　格雷码  二进制
0  　　 000    000
1  　　 001    001
2   　　011    010
3   　　010    011
4   　　110    100
5   　　111    101
6   　　101    110
7   　　100    111

直接排列

以二进制为0值的格雷码为第零项，第一项改变最右边的位元，第二项改变右起第一个为1的位元的左边位元，第三、四项方法同第一、二项，如此反复，即可排列出n个位元的格雷码。

镜射排列

n位元的格雷码可以从n-1位元的格雷码以上下镜射后加上新位元的方式快速的得到，如右图所示一般。

格雷码转二进制数

由于G(n) = B(n+1) + B(n) 

故而B(n) = B(n+1) - G(n) 

自高位至低位运算即可，无需考虑借位。
例：
格雷码0111，为4位数，故设二进制数自第5位至第1位分别为：0 b3 b2 b1 b0。

b3= 0-0    =0

b2=b3-1=0-1=1

b1=b2-1=1-1=0

b0=b1-1=0-1=1

因此所转换为之二进制码为0101

和格雷码有相同数学模式的玩具

中国的古老益智玩具九连环有着和格雷码完全相同的数学模式，外国一款名为spin out的玩具也是运用相同的数学模式。