格雷码转换为二进制


反射二进制码或格雷码是对二进制数制的排序,使得两个连续的值仅在一个比特(二进制数字)上有所不同。格雷码在硬件生成的二进制数的正常序列中非常有用,因为在从一个数到下一个数的转换过程中可能会导致错误或歧义。因此,格雷码可以轻松地消除此问题,因为在任意两个数之间的转换过程中,只有一个比特的值发生变化。

格雷码到二进制码的转换

格雷码用于旋转和光学编码器、卡诺图错误检测。两个相邻格雷码的汉明距离始终为1,并且第一个格雷码和最后一个格雷码的汉明距离也始终为1,因此它也被称为循环码。您可以使用两种方法将格雷码转换为二进制数。

使用卡诺(K)图

您可以使用其他方法构造格雷码,但它们可能无法像上面给出的方法那样并行执行。例如,3位格雷码可以使用K图进行构造,如下所示

十进制
格雷码
二进制
0
000
000
1
001
001
2
011
010
3
010
011
4
110
100
5
111
101
6
101
110
7
100
111

使用异或()运算

这是一种从格雷码获得二进制数的非常简单的方法。以下是针对n位二进制数的步骤 −

  • 二进制码的最高有效位(MSB)始终等于给定二进制数的MSB。
  • 输出二进制码的其他位可以通过检查该索引处的格雷码位来获得。如果当前格雷码位为0,则复制前一个二进制码位,否则复制前一个二进制码位的反码。

例如,对于3位二进制数,假设二进制数字为b2、b1、b0,其中b2是最高有效位(MSB),b0是最低有效位(LSB)。格雷码数字为g2、g1、g0,其中g2是最高有效位(MSB),g0是最低有效位(LSB)。

格雷码
g2g1g0
二进制
b2b1b0
000
000
001
001
011
010
010
011
110
100
111
101
101
110
100
111

因此,您使用k图求解布尔表达式,将得到b2=g2,b1=g1⊕g2,以及b0=g0⊕g1⊕g2

类似地,您可以将n位(bnb(n-1)...b2b1b0)二进制数转换为格雷码(gng(n-1)...g2g1g0)。对于最低有效位(LSB),bn=gn,b(n-1)=g(n-1)⊕gn,…. b1=g1⊕g2⊕g3...⊕gn,以及b0=g0⊕g1⊕g2⊕g3...⊕gn

示例 − 将格雷码100111转换为二进制数。

因此,根据上述算法,

b5=g5=1=1

b4=g5⊕g4 =1⊕0 =1

b3=b4⊕g3 =1⊕0 =1

b2=b3⊕g2 =1⊕1 =0

b1=b2⊕g1 =0⊕1 =1

b0=b1⊕g0 =1⊕1 =0

因此,二进制数将为111010。

更新于: 2023年10月31日

56K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告