格雷码与二进制码之间的相互转换

什么是格雷码?

格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本特点就是任意两个相邻的代码只有一位二进制数不同。

常用的二进制数与格雷码间的转换关系如下表:

十进制码 二进制码 格雷码 十进制码 二进制码 格雷码
0 0000 0000 8 1000 1100
1 0001 0001 9 1001 1101
2 0010 0011 10 1010 1111
3 0011 0010 11 1011 1110
4 0100 0110 12 1100 1010
5 0101 0111 13 1101 1011
6 0110 0101 14 1110 1001
7 0111 0100 15 1111 1000

二进制码转换成格雷码

二进制码转换成格雷码的规则如下:

  • 保留二进制码的最高位作为格雷码的最高位。
  • 格雷码的其余位为二进制码对应位与其上一位相异或。

转换示意图如下:
在这里插入图片描述
代码如下:

//二进制码转格雷码
string BinaryToGray(string binary)
{
    
    
	string gray(binary.size(), '0');
	//1、保留二进制码的最高位作为格雷码的最高位
	gray[0] = binary[0];
	//2、格雷码的其余位为二进制码对应位与其上一位相异或
	for (size_t i = 1; i < gray.size(); i++)
	{
    
    
		gray[i] = (binary[i - 1] - '0') ^ (binary[i] - '0') + '0';
	}
	return gray;
}

格雷码转换成二进制码

格雷码转换成二进制码的规则如下:

  • 保留格雷码的最高位作为二进制码的最高位。
  • 二进制码的其余位为格雷码对应位与二进制码上一位相异或。

转换示意图如下:
在这里插入图片描述
代码如下:

//格雷码转二进制码
string GrayToBinary(string gray)
{
    
    
	string binary(gray.size(), '0');
	//1、保留格雷码的最高位作为二进制码的最高位
	binary[0] = gray[0];
	//2、二进制码的其余位为格雷码对应位与二进制码上一位相异或
	for (size_t i = 1; i < gray.size(); i++)
	{
    
    
		binary[i] = (binary[i - 1] - '0') ^ (gray[i] - '0') + '0';
	}
	return binary;
}

猜你喜欢

转载自blog.csdn.net/chenlong_cxy/article/details/124561464