格雷码或反射二进制码是一种数字二进制表示形式,其中两个连续数字仅相差一位。
例如1的格雷码是001,2的格雷码是011。
格雷码通常用于纠错,因为它可以防止在状态更改时通常的二进制表示中可能发生的一些数据错误。
由于其独特的属性,格雷码在 k-map、通信等方面也很有帮助。
先决条件
在进一步阅读之前,请先研究十进制、二进制和格雷码符号。
问题陈述 1
给定一个十进制数 n,求该数的十进制形式的格雷码。
示例
'Input: 3
Output: 2
说明 -> 3 的二进制表示为 011。其格雷码表示为 010。010 的十进制表示为 2。
因此,3 的格雷码的十进制等效值为 2。
'Input: 5
Output: 7
说明 -> 5 的二进制表示形式为 101。其格雷码表示形式为 111,其十进制表示形式为 7。
因此,5 的格雷码的十进制等效值为 7。
解决方案
编译器理解二进制格式的数字。
因此,在我们的程序中,当我们输入十进制格式的数字时,它会被解释为二进制。
因此,我们只需要将数字从其二进制等价物转换为其格雷码即可。
二进制到格雷码转换
二进制表示和格雷码的最左边的位是相等的。通过对连续的二进制位进行异或运算可以找到右侧的以下位。
例如 -
考虑n = 3。3的二进制代码是011。
二进制码和格雷码的最左边位相等。因此,格雷码中从左起第一位就是0。
对于左起第二位,将二进制代码中左起第一位和第二位进行异或。 0 异或 1 = 1。
对于左起第三位,将二进制代码中左起第二位和第三位进行异或。 1 异或 1 = 0。
因此格雷码:010。
算法:使用按位运算符
我们可以通过以下步骤获取数字n的格雷码 -
n 右移 1。
将右移后的数字与原始 n 进行异或。
示例
下面是一个使用按位运算符从二进制代码中查找格雷码的 C++ 程序
'#include <bits/stdc++.h>
using namespace std;
//This function returns the decimal equivalent
// of the gray code of n.
int dec_equi_of_gray(int n) {
return n ^ (n >> 1);
}
int main(){
int n = 3;
cout<<"The decimal equivalent of the gray code of 3 is: ";
//Function call to convert binary code to gray code
cout << dec_equi_of_gray(n) << endl;
return 0;
}
输出
'The decimal equivalent of the gray code of 3 is: 2
问题陈述 2
给定格雷码的十进制值,求其十进制码值。
示例
'Input: 15
Output: 10
解释 -> 作为输入给出的格雷码:1111(二进制值 15)。
现在,将格雷码转换为二进制码,从 1111 得到 1010。
1010 是 10 的二进制值。因此,输出。
'Input: 10
Output: 12
解释 -> 作为输入给出的格雷码:1010(二进制值 10)。
格雷码1010的二进制为1100。1100的十进制为12。
格雷码到二进制码的转换
二进制码的最左边位(MSB)与格雷码的MSB相同。通过将前一个索引二进制位与当前索引灰度位进行异或,可以找到以下位。
例如:考虑格雷码 1111。
二进制码的 MSB 将与格雷码的 MSB 相同。因此,MSB 将为 1。
对于左二位,检查格雷码左二位与二进制码最左位的异或。因此,1 ^ 1 = 0。
同样,对于最左边的第三位,0 ^ 1 = 1。
对于最左第四位,1 ^ 1 = 0。
因此二进制代码:1010。
示例
下面是一个 C++ 程序,用于使用按位运算符从格雷码中查找二进制代码
'#include <bits/stdc++.h>
using namespace std;
//This function returns the decimal value of
//the binary code converted from the gray code n.
int gray_to_binary(int n){
int binary = n;
while (n > 0){
n >>= 1;
binary ^= n;
}
return binary;
}
// Driver Code
int main(){
int n = 15;
cout<<"The decimal value of the binary code converted from the gray code is: ";
// Function call to convert gray code to binary code
cout << gray_to_binary(n) << endl;
return 0;
}
输出
'The decimal value of the binary code converted from the gray code is: 10
结论
本文解决了寻找给定数字 n 的格雷码十进制等价及其逆的问题。我们使用按位运算符解决了这个问题。针对问题的两个部分都提供了 C++ 程序。