avatar

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

晕了?图示来了!

发表评论

电子邮件地址不会被公开。 必填项已用*标注