格雷码 订阅
典型的二进制格雷码(Binary Gray Code)简称格雷码,因1953年公开的弗兰克·格雷(Frank Gray,18870913-19690523)专利“Pulse Code Communication”而得名,当初是为了通信,现在则常用于模拟-数字转换和位置-数字转换中。法国电讯工程师波特(Jean-Maurice-Émile Baudot,18450911-19030328)在1880年曾用过的波特码相当于它的一种变形。1941年George Stibitz设计的一种8元二进制机械计数器正好符合格雷码计数器的计数规律。格雷码(Gray code)曾用过Grey Code、葛莱码、葛兰码、格莱码、戈莱码、循环码、二进制反射码、最小差错码等名字,它们有的是错误的,有的易与其它名称混淆,建议不再使用它们。 [1] 展开全文
典型的二进制格雷码(Binary Gray Code)简称格雷码,因1953年公开的弗兰克·格雷(Frank Gray,18870913-19690523)专利“Pulse Code Communication”而得名,当初是为了通信,现在则常用于模拟-数字转换和位置-数字转换中。法国电讯工程师波特(Jean-Maurice-Émile Baudot,18450911-19030328)在1880年曾用过的波特码相当于它的一种变形。1941年George Stibitz设计的一种8元二进制机械计数器正好符合格雷码计数器的计数规律。格雷码(Gray code)曾用过Grey Code、葛莱码、葛兰码、格莱码、戈莱码、循环码、二进制反射码、最小差错码等名字,它们有的是错误的,有的易与其它名称混淆,建议不再使用它们。 [1]
信息
外文名
Binary Gray Code
提出时间
1940年
提出者
弗兰克·格雷
中文名
格雷码
全    称
二进制格雷码
格雷码概述
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。 [2]  在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。格雷码有多种编码形式。格雷码(Gray Code)曾用过Grey Code、葛莱码、格莱码、戈莱码、循环码、反射二进制码、最小差错码等名字,它们有的不对,有的易与其它名称混淆,建议不要再使用这些曾用名。 [3] 
收起全文
精华内容
下载资源
问答
  • 格雷码

    2019-10-27 15:41:03
    Python数据结构格雷码前言格雷码二进制格雷码转自然二进制码作者说 前言   格雷码是由贝尔实验室的Frank Gray与1940年提出,用于在PCM(脉冲编码调变)方法传送讯号,防止讯号出错。其特点是任何两个相邻数的代码...

    前言

      格雷码是由贝尔实验室的Frank Gray与1940年提出,用于在PCM(脉冲编码调变)方法传送讯号,防止讯号出错。其特点是任何两个相邻数的代码只有一位二进制数不同的编码。时至今日,格雷码有了更广泛的作用,比如在遗传算法中,使用自然二进制码来表示基因会造成汉明悬崖问题;而采用格雷码则能够很好的避免这个问题的出现。

    格雷码

    在这里插入图片描述

    自然二进制码转二进制格雷码

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

    二进制格雷码转自然二进制码

      二进制码转换成格雷码的做法是,保留二进制码的最高位,而次高位格雷码为二进制高位与此高位相异或

    Python实现

    # -*- coding: utf-8 -*-
    
    import numpy as np
    #实现二进制数组
    class BinArray:
        def __init__(self,n ):
            self.n = n
            self.array= np.zeros([self.n])
            self.gray = np.zeros([self.n])
        def bin2int(self):
            ret = 0
            for i in range(self.n):
                if(self.array[i])==1:
                    ret+= int(2**i)
            return ret
        def bin2gray(self):
            #二进制转格雷码
            #第一位不变
            self.gray[0] =self.array[0] 
            for i in range(1,self.n):
                #python的xor运算不支持整形
                if self.gray[i-1]==self.array[i]:
                    self.gray[i]=0
                else:
                    self.gray[i]=1
    
       
        def setbinarray(self,a):
            if(len(a))>self.n:
                return
            for i in range(len(a)):
                self.array[i]=a[i]
        def show(self):
            print("自然二进制")
            print(self.array)
            self.bin2gray()
            print("格雷码")
            print(self.gray)
    
    if __name__ == "__main__":
        ba = BinArray(4)
        a = [1,1,0,1]
        ba.setbinarray(a)
        ba.show()
        
       
    

    作者说

      本文是继Python数据结构最小生成树的序章,以简单的方法实现了格雷码。写本文的另一个目的,在于为Python遗传算法提供优化的方案。
      数据结构虽然是特别基础的理论,但是很多高深的算法和第三方库都需要程序员又较好的数据结构的功底,Tensorflow更是很好的展示了这个理念。
      Python数据结构格雷码是这个系列的第二篇文章,如果您有任何宝贵的意见,欢迎你将意见发送至我的邮箱707101557@qq.com。如果你想要获取更多学习资料,欢迎加入Python学习QQ群,916372346。或者购买我们的课程https://www.jianshu.com/p/da4d714d49b9

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,379
精华内容 2,551
关键字:

格雷码