格雷码的应用及其计算方法

tetsai
原创声明
本文由tetsai原创,转载请注明来源
格雷码有啥特征捏?
每一个相邻的数字,只有一个bit位产生变化,不像普通二进制比如01111,+1之后就变成10000了,很多数发生了变化
那它有啥卵用捏?
它主要在硬件电子电路中有用,主要有2
- 因为半导体晶体管反应速度不一样,比如从01111变成10000,可能一是半会反应不过来,变成了10001都有可能(低位的晶体管反应慢,还停在1这个状态)
- 因为状态改变太大,可能会在一瞬间电流猛增,从而影响电路稳定性
计算:普通二进制->格雷码
最高位不变,相邻的两个位依次异或,例如
101101
最高位是1,所以格雷码是1?????(?代表尚未计算,占位
然后101101,因为101101,101101,101101,101101,101101
所以相邻的两位分别是10 01 11 10 01,异或结果为1 1 0 1 1
所以?????为 1 1 0 1 1
格雷码1?????=111011
101101的格雷码为111011
图示:

计算:格雷码->普通二进制
还是111011,如何把这个格雷码转回去呢?
依然是最高位等同,所以普通二进制的最高位是1
然后计算结果是1?????
我们将最后一个算出来的位,从格雷码的次高位开始,依次进行异或
例如:
111011 (标记的是格雷码的次高位)
当前计算结果为1?????,最后一个算出来的位是1(废话,剩下的都是?????),又因为格雷码的次高位是1,所以运算为1和1的异或
1和1的异或得到0
所以当前计算结果为10????
看!我们算出来了,我们下波运算要作以下调整:
最后一个算出来的位变成了0,格雷码的次高位的下一位是1,看下面!
111011 (标记的是格雷码的次高位的下一位)
最后一个算出来的位 异或 次高位的下一位 = 0 异或 1 = 1
就这样,计算结果为101???,最后一次算出来的位再次成为了1,次高位的下一位的下一位是0....
按这个节奏算下去,肯定能算到101101的
晕了?图示来了!
