⭐ What? 格雷码
- 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。
二进制数与格雷码间的转换关系如下表:
⭐ How? 二进制码直接转格雷码
- 二进制码转换成格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。如下图:
代码实现:
"""
输出n位二进制数的所有格雷码
"""
len_n = 2**n
res = []
for i in range(len_n):
res.append(i^(i>>1))
print(res)
⭐ How? 格雷码直接转二进制码
- 格雷码转换成二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。
代码实现同理:二进制码直接转格雷码