在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code).
第 N 个格雷码在 N^(N>>1) 的位中
^ 按位异或,同0异1, >>1 左移一位 也就是除以2、
假设只有四个数字生成格雷码 那么数字序列是:0 1 3 2
gray-code
for i in range(0, 100):
gary_c = i ^ (i >> 1)
数字转换成二进制
def d2b(d, n):
"""
n:二进制位数
d:数字序列 或者单个数字
"""
d = np.array(d)
d = np.reshape(d, (1, -1)) #1 m
power = np.flipud(2**np.arange(n))#n
g = np.zeros((np.shape(d)[1], n)) #m n
for i, num in enumerate(d[0]):#num 1-m
g[i] = num * np.ones((1,n))
b = np.floor((g%(2*power))/power)
return b
调用
合并:
for i in range(0,10):
z = i ^ (i >> 1)
print(d2b(z, 8))