- yuxitong's blog
格雷码与二进制码的转换
- 2024-8-21 16:38:03 @
二进制码转换成格雷码
二进制码转换成格雷码的规则如下:
- 保留二进制码的最高位作为格雷码的最高位。
- 格雷码的其余位为二进制码对应位与其上一位相异或。
格雷码转换成二进制码
格雷码转换成二进制码的规则如下:
- 保留格雷码的最高位作为二进制码的最高位。
- 二进制码的其余位为格雷码对应位与二进制码上一位相异或。
代码如下
//顶级垃圾程序
//A very bad program
#include <bits/stdc++.h>
using namespace std;
string BinaryToGray(string s){
int len = s.size();
string ans(len, '0');
ans[0] = s[0];
for (int i = 1; i < len; i++){
ans[i] = (ans[i - 1] - '0') ^ (s[i] - '0') + '0';
}
return ans;
}
string GrayToBinary(string s){
int len = s.size();
string ans(len, '0');
ans[0] = s[0];
for (int i = 1; i < len; i++){
ans[i] = (ans[i - 1] - '0') ^ (s[i] - '0') + '0';
}
return ans;
}
int main(){
char a;
string s;
cin >> a >> s;
if (a == 'B') cout << GrayToBinary(s); //转二进制
else if (a == 'G')cout << BinaryToGray(s); //转格雷码
else cout << "Wrong";
return 0;
}
常用的二进制数与格雷码间的转换关系如下表:
输入样例
B 0011
输出样例
0010