格雷码转换为二进制
反射二进制码或格雷码是对二进制数制的排序,使得两个连续的值仅在一个比特(二进制数字)上有所不同。格雷码在硬件生成的二进制数的正常序列中非常有用,因为在从一个数到下一个数的转换过程中可能会导致错误或歧义。因此,格雷码可以轻松地消除此问题,因为在任意两个数之间的转换过程中,只有一个比特的值发生变化。
格雷码到二进制码的转换
格雷码用于旋转和光学编码器、卡诺图和错误检测。两个相邻格雷码的汉明距离始终为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。