跳转至

格雷码

前置知识

二进制

目标

格雷码的生成过程,计算方法的代码模板

What

img

img

格雷码有什么作用

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

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

手动构造

img

镜像构造

img

计算方法(重点)

img

G(0) = 0 ^ (0 >> 1) = 0000
G(1) = 1 ^ (1 >> 1) = 0001
G(2) = 2 ^ (2 >> 1) = 0011
G(3) = 3 ^ (3 >> 1) = 0010
G(4) = 4 ^ (4 >> 1) = 0110

总结

手动构造、镜像构造

计算方法的代码模板 n ^ (n >> 1)

参考

oi-wiki格雷码

维基百科-格雷码