格雷码(Gray Code)是一种二进制编码方式,相邻两个编码之间只有一位不同。
| 十进制 | 自然二进制 | 格雷码 |
|---|---|---|
| 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}