格雷码
知识总结
格雷码的定义
格雷码(Gray Code)是一种二进制编码方式,相邻两个编码之间只有一位不同。
格雷码 vs 自然二进制码
| 十进制 | 自然二进制 | 格雷码 |
|---|---|---|
| 0 | 000 | 000 |
| 1 | 001 | 001 |
| 2 | 010 | 011 |
| 3 | 011 | 010 |
| 4 | 100 | 110 |
| 5 | 101 | 111 |
| 6 | 110 | 101 |
| 7 | 111 | 100 |
转换公式
二进制 → 格雷码:
$$Gi = Bi \oplus B_{i+1}$$
最高位不变,其余每位是原码该位与前一位的异或。
int binaryToGray(int n) {
return n ^ (n >> 1);
}格雷码 → 二进制:
最高位不变,其余每位是格雷码该位与已求出的前一位二进制的异或。
1int grayToBinary(int g) {
2 int b = 0;
3 for (; g; g >>= 1)
4 b ^= g;
5 return b;
6}格雷码的应用
- 减少错误:在数字信号传输中,相邻值只变一位,减少毛刺错误
- 旋转编码器:机械位置编码
- 卡诺图:逻辑电路简化中使用格雷码排列
初赛常考
- 给定二进制码求格雷码
- 给定格雷码求二进制码
- n位格雷码的生成规律