格雷码与二进制码的相互转换 (python代码实现)


What? 格雷码

  • 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。

二进制数与格雷码间的转换关系如下表:
格雷码与二进制码的相互转换 (python代码实现)_第1张图片



How? 二进制码直接转格雷码

  • 二进制码转换成格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。如下图:
    格雷码与二进制码的相互转换 (python代码实现)_第2张图片
    代码实现:
"""
输出n位二进制数的所有格雷码
"""
len_n = 2**n
res = []
# 二进制直接转一波格雷码
# 二进制的每一位与其前一位异或作为格雷码的结果。
# 即等价于i^(i>>1)
for i in range(len_n):
   	res.append(i^(i>>1))

print(res)


How? 格雷码直接转二进制码

  • 格雷码转换成二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。

格雷码与二进制码的相互转换 (python代码实现)_第3张图片

代码实现同理:二进制码直接转格雷码


你可能感兴趣的:(位运算,格雷码,算法,代码实现)