精华内容
下载资源
问答
  • 格雷码转二进制

    2014-09-20 10:28:24
    输入格雷码,输出对应二进制码,MATLAB代码
  • 格雷码二进制的转换

    万次阅读 多人点赞 2016-06-16 13:02:09
    格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的...

    一、什么是格雷码?

    格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的代码只有一位二进制数不同,这点很重要。常用的二进制数与格雷码间的转换关系如下表:

    常用的二进制数与格雷码间的转换

    二、二进制格雷码与自然二进制码的互换

    1、二进制码转换成二进制格雷码
      二进制码转换成二进制格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。
      转换示意图
      
     转换代码:
     

        //根据二进制转换成格雷码的法则,可以得到以下的代码:
          static unsigned int DecimaltoGray(unsigned int x)
          {
             return x^(x>>1);
          }
    
         //以上代码实现了unsigned int型数据到格雷码的转换,最高可转换32位自然二进制码,超出32位将溢出。   
          static  int DecimaltoGray( int x)
          {
             return x^(x>>1);
          }
    
          //以上代码实现了 int型数据到格雷码的转换,最高可转换31位自然二进制码,超出31位将溢出。       

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

    根据二进制格雷码转换成自然二进制码的法则,可以得到以下的三种代码方式: 
           static unsigned int GraytoDecimal(unsigned int x)
           {
              unsigned int y = x;
              while(x>>=1)
                y ^= x;
              return y;
           }       
           static unsigned int GraytoDecimal(unsigned int x)
           {
              x^=x>>16;
              x^=x>>8;
              x^=x>>4;
              x^=X>>2;
              x^=x^1;
              return x;
           }       
           static unsigned int GraytoDecimal(unsigned int x)
           {
              int i;
              for(i=0;(1<<i)<sizeof(x)*8;i++)
              {
                 x^=x>>(1<<i);
              }
              return x;
           }        
      //以上代码实现了unsigned int型数据到自然二进制码的转换,最高可转换32位格雷码,超出32位将溢出。将数据类型改为int型即可实现31位格雷码转换。
    展开全文
  • 四、 将格雷码转换为二进制 1. 将格雷码转换为二进制 2. 根据条件递增二进制值 3. 将二进制转换为格雷码 4. 将计数器的最终格雷码保存至寄存器中 四、由格雷码转换为二进制 公式 例:将格雷码转换为相等的二进制数 ...

    数字电路基础知识——格雷码和二进制码的转换的算法和Verilog实现

    关于数字电路中的码制问题在这篇博客中已经做了详细分析,
    数字电路基础知识——数字IC中的进制问题(原码,反码,补码以及各进制的转换)
    这篇博客会再次详细分析一下数字IC设计中关于 格雷码(Gray Code) 的问题,在数字IC设计中格雷码的使用范围很广,格雷码由于其误码率底的有点基本上每个模块都会使用到格雷码。
    近期在学习FIFO的时候碰到格雷码转换二进制码的问题。特此写这篇博客总结一下。

    一、什么是格雷码

    格雷码的每一位按照一定的顺序循环。如最右边的一位按照0110的顺序循环,右边第二位按照00111100的顺序循环。即自右向左0、1的循环数目翻倍。
    格雷码的最主要特点:各个相邻码之间仅有一位状态不同,首尾也是仅有一位状态不同。
    在这里插入图片描述

    二、为什么要用格雷码

    首先说下二进制码,在FIFO的设计中,在写请求中,写指针在写时钟作用下递增,在产生FIFO满信号时,需要将写指针和读指针进行比较,由于两个指针分别与其各自的时钟同步,但是彼此之间又是异步的关系,所以在使用二进制计数器实现指针的时候,就会出现比较的指针出现取样值错误的问题。
    如从FFF到000可能会进行如下的转换
    在这里插入图片描述
    如果此时同步时钟边沿在FFF向000转换的时候,就可能会把上面的的三位二进制数的任何取样值同步到新的时钟域,导致数据错误。
    所以采取的办法通常是使用格雷码计数
    在这里插入图片描述
    格雷码的优势在于一个数变为另一个数时,只有一位发生变化。

    三、用格雷码实现FIFO指针

    在这里插入图片描述
    如果要产生完美的FIFO空或满条件,首先需要正确的读写指针,在时钟域传递指针的最好的办法就是使用格雷码来实现指针,这种编码能够消除绝大数错误。上面是格雷码的设计流程。

    1. 将格雷码转换为二进制
    2. 根据条件递增二进制值
    3. 将二进制转换为格雷码
    4. 将计数器的最终格雷码保存至寄存器中
    四、由格雷码转换为二进制
    1. 公式
      格雷码的转换公式:(i < n-1)
      在这里插入图片描述
      计数器的位编号如下:
      MSB: Most Significant Bit的缩写,指最高有效位
      LSB: Least Significant Bit,指最低有效位
      在这里插入图片描述
    2. 例:将格雷码转换为相等的二进制数(@表示异或xor)
      i = 3,
      bin3=gray3 = gray[3] = 1
      i = 2,
      bin2 = gray2 @ bin3 = gray2 @ gray3 = gray[2] @ gray[3] = 1
      i = 1,
      bin1 = gray1 @ bin2 = gray1 @ gray2 @ gray3 = gray[1] @gray[2] @gray[3] = 0
      i = 0,
      bin0 = gray0 @ bin1 = gray0 @ gray1 @ gray2 @ gray3 = gray[0] @ gray[1] @ gray[2] @ gray[3] =0
      于是可以得到如下四个等式:
      在这里插入图片描述
    3. Verilog 语言描述格雷码转换为二进制码
    module gray_to_bin (bin, gray);
    parameter SIZE = 4;
    input [SIZE – 1:0] bin;
    output [SIZE – 1:0] gray;
    reg [SIZE – 1:10] bin;
    integer i;
    always @ (gray)
    for ( i = 0; i <= SIZE; i = i + 1)
    bin[i] = ^(gray >> i);  		//右移一位并按位异或
    endmodule
    
    五、由二进制码转换为格雷码
    1. 公式
      二进制向格雷码的转换公式:(i < n-1)
      在这里插入图片描述
    2. 例:将二进制转换为相等的格雷码(@表示异或xor)
      i = 3,
      gray3 = bin3 = bin[3] = 1
      i = 2,
      gray2 = bin2 @ bin3 = bin[2] @ bin[3] = 0
      i = 1,
      gray1 = bin1 @ bin2 = bin[1] @ bin[2] = 1
      i = 0,
      gray0 = bin0 @ bin1 = bin[0] @ bin[1] = 0
      于是可以得到如下四个等式:
      在这里插入图片描述
      由上式可以看出,通过逐位异或,或者将二进制码右移后与自己异或的操作方式,计算相应的格雷码,如下
      在这里插入图片描述
    3. Verilog 语言描述二进制码转换为格雷码
    module bin_to_gray (bin, gray);
    parameter SIZE = 4;
    input [SIZE-1:0] bin;
    output [SIZE-1:0] gray;
    assign gray = (bin >> 1) ^ bin;			//右移与自己异或
    endmodule
    
    六、格雷码计数逻辑的实现

    由格雷码实现FIFO指针的流程图发现

    module gray_ counter (clk, gray, inr, reset_n)
    	parameter SIZE = 4;
    	input clk, inr, reset_n;t
    	output [SIZE -1 ] gray;
    	reg [SIZE]1 ] gray_temp, gray, bin_temp, bin;
    	integer i;
    	
    	always @ (gray or inr)
    	begin:gray_bin_gray
    		for (i = 0; i<SIZE ; 1 = i +1)
    		bin[i] = ^(gray >> i); // gray to binary conversion
    		bin_temp = bin + inr; // addition in binary
    		gray_temp = bin_temp >> 1) ^ bin_temp; // binary to gray conversion
    	end
    endmodule
    

    下面的逻辑快将转换后的格雷码值寄存起来

    always @ (posedge clk or negedge reset_n)
    begin:gray_registered
    if (~reset_n)
    	gray <= {SIZE {1’b0}};
    else
    	gray <= gray_temp;
    end
    

    下图显示格雷码计数器的逻辑原理图:

    展开全文
  • 格雷码简介及格雷码二进制的转换程序格雷码简介格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-EmlleBaudot发明的一种编码[1] ,因Frank Gray于1953年申请专利...

    格雷码简介及格雷码与二进制的转换程序

    格雷码简介

    格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle

    Baudot发明的一种编码[1] ,因Frank Gray于1953年申请专利“Pulse Code

    Communication”得名。当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4] 。

    典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便[5] 。

    格雷码属于可靠性编码,是一种错误最小化的编码,因为它大大地减少了由一个状态到下一个状态时电路中的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于模-数转换中,当模拟量发生微小变化而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性.这就允许代码电路能以较少的错误在较高的速度下工作。

    格雷码在现代科学上获得了广泛的应用,人们还发现智力玩具九连环的状态变化符合格雷码的编码规律,汉诺塔的解法也与格雷码有关。

    除了已知的特点,格雷码还有一些鲜为人知的性质。多数数字电子技术和计算机技术的文献认为格雷码是无权码,只有J.F.A.

    Thompson认为可以从格雷码直接转换成十进制数[6]。如果将格雷码的“权”及格雷码的奇偶性等性质在数学上给予证明,将有助于格雷码研究与应用的发展,有助于自动化技术的发展,还可有助于计算机科学的发展。

    /*   格雷码与二进制的转换程序

    * 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数(1~31位)

    * 推导方式如下(以三位格雷码为例):

    * 序号 格雷码 格雷码实值 二进制码 二进制实值

    *  0  000   0   000   0

    *  1  001   1   001   1

    *  2  011   3   010   2

    *  3  010   2   011   3

    *  4  110   6   100   4

    *  5  111   7   101   5

    *  6  101   5   110   6

    *  7  100   4   111   7

    *     由上面的数据可看出.如果,按照序号01327645的方式遍历格雷码.其编

    * 码实值是按自然数顺序排列.反之,如果按此顺序遍历其二进制实值.则会发

    * 现遍历过的数据的个数减一即为二进制码所对应格雷码的实值.再观察序号

    * 顺序,我们会发现: 如果把二进制码分半,前半部分从前向后遍历,后半部分

    * 从后向前遍历.如果分半部分可再分,则再将其分半.并按照前半部分从前向

    * 后遍历(分解),后半部分从后向前遍历的方式遍历(分解).直到不可分.即可

    * 实现按序号所描述顺序遍历二进制码.如果,按此顺序遍历二进制码,我们可

    * 以很方便地在序列中找到所要的二进制码与其对应的格雷码.本思想可以很

    * 方便地用递归实现.这样就实现了二进制到格雷码的转换.同样,格雷码到二

    * 进制的转换,也可以用相同的方法推出.为了加快运算,我们跳过不必要的遍

    * 历将递归改为递推.这样就实现了格雷码与二进制之间的快速转换.

    * 此算法的时间复杂度约为O(n),n为要转换数据的BIT数.

    * *****************************************************************

    *  补充说明:

    *  其它的转换方法还有

    *    1、查表法(建立一个二进制与格雷码的对应表)

    *    2、公式法(根据卡诺图建立一个二进制到格雷码的每一位的公式)

    */

    //#define test

    #i nclude

    #ifdef test

    #i nclude

    #endif

    /**

    * 二进制转换成格雷码

    * @param lStart lValue所在区间下界

    * @param lEnd lValue所在区间上界

    * @param lValue 要转换的二进制数的实值

    * @return 返回格雷码对应的二进制数的实值

    * @see g2b() g2b 格雷码转换二进制

    * @see BtoG() BtoG 二进制转换格雷码

    * @see GtoB() BtoG 格雷码转换二进制

    * @author 黄毅

    * @useage a=b2g(0,15,4); //取得4所对应格雷码的二进制值 结果a等于6

    * @memo lValue的值必须在区间[lStart,lEnd]里,否则无法求得所求结果.相应地,如果区间越小,求得结

    *       果所用的时间就越少.而且lStart,lEnd的值必须为2的N次方减1. 通常lStart为0.为了方便求得

    *       其值,建议使用BtoG()函数来进行操作.不过这样会使计算时间加长到原来的120%~180%.

    */

    unsigned long b2g(unsigned long lStart,unsigned long lEnd,unsigned

    long lValue)

    {

    unsigned long Start=lStart,End=lEnd,Temp=0,Counter=0;

    bool Type=true;

    while(Start

    {

    Temp=(End+Start-1)>>1;

    if (lValue<=Temp)

    {

    if(!Type)

    Counter+=((End-Start+1)>>1);

    End=Temp;

    Type=true;

    }

    else

    {

    if(Type)

    Counter+=((End-Start+1)>>1);

    Start=++Temp;

    Type=false;

    }

    }

    return Counter;

    }

    /**

    * 格雷码转换成二进制

    * @param lStart lValue对应二进制数所在区间下界

    * @param lEnd lValue对应二进制数所在区间上界

    * @param lValue 要转换的格雷码的实值

    * @return 返回二进制数对应的格雷码的实值

    * @see b2g() b2g 二进制转换格雷码

    * @see BtoG() BtoG 二进制转换格雷码

    * @see GtoB() BtoG 格雷码转换二进制

    * @author 黄毅

    * @useage a=b2g(0,15,6); //取得6所对应二进制值的格雷码 结果a等于4

    * @memo lValue对应二进制数的值必须在区间[lStart,lEnd]里,否则无法求得所求结果.相应地,如果区

    *       间越小,求得结果所用的时间就越少.而且lStart,lEnd的值必须为2的N次方减1. 通常lStart为0.

    *       为了方便求得其值,建议使用GtoB()函数来进行操作.但会使计算时间加长到原来的105%~140%.

    */

    unsigned long g2b(unsigned long lStart,unsigned long lEnd,unsigned

    long lValue)

    {

    unsigned long Start=lStart,End=lEnd,Counter=0,Temp=0;

    bool Type=true;

    while(Start

    {

    Temp=Counter+((End-Start+1)>>1);

    if(Type^(lValue

    {

    if(Type) Counter=Temp;

    Start=(Start+End+1)>>1;

    Type=false;

    }

    else

    {

    if(!Type) Counter=Temp;

    End=(Start+End-1)>>1;

    Type=true;

    }

    }

    return Start;

    }

    //b2g外壳程序,用来算lStart,lEnd;

    long BtoG(unsigned long lValue)

    {

    register unsigned long lV=lValue,lMax=1;

    while (lV>0)

    {

    lV>>=1;

    lMax<<=1;

    }

    if (lMax==0) return -1;

    return b2g(0,--lMax,lValue);

    }

    //g2b外壳程序

    long GtoB(unsigned long lValue)

    {

    register unsigned long lV=lValue,lMax=1;

    while (lV>0)

    {

    lV>>=1;

    lMax<<=1;

    }

    if (lMax==0) return -1;

    return g2b(0,--lMax,lValue);

    }

    main()

    {

    long input=0;

    #ifdef test

    //程序测试部分

    clock_t cStart,cEnd;

    unsigned long dTime;

    cStart=clock();

    for (input=0;input<9999999;input++)

    BtoG(32768);

    cEnd=clock();

    dTime=(cEnd-cStart);

    printf("BtoG: %ld / %ld\n",dTime,CLOCKS_PER_SEC);

    //------------------------------------------------------

    cStart=clock();

    for (input=0;input<9999999;input++)

    b2g(0,65535,32768);

    cEnd=clock();

    dTime=(cEnd-cStart);

    printf("b2g: %ld / %ld\n",dTime,CLOCKS_PER_SEC);

    //------------------------------------------------------

    cStart=clock();

    for (input=0;input<9999999;input++)

    GtoB(32768);

    cEnd=clock();

    dTime=(cEnd-cStart);

    printf("GtoB: %ld / %ld\n",dTime,CLOCKS_PER_SEC);

    //------------------------------------------------------

    cStart=clock();

    for (input=0;input<9999999;input++)

    g2b(0,65535,32768);

    cEnd=clock();

    dTime=(cEnd-cStart);

    printf("g2b: %ld / %ld\n",dTime,CLOCKS_PER_SEC);

    #else

    //程序演试部分

    printf("Input(HEX):");

    scanf("%x",&input);

    while (input!=-1)

    {

    printf("------BtoG------\nBinary:%08Xh\nGray

    :%08Xh\n------GtoB------\nGray

    :%08Xh\nBinary:%08Xh\n----------------\n",input,BtoG(input),input,GtoB(input));

    printf("Input(HEX):");

    scanf("%x",&input);

    }

    #endif

    ======================================================================================二进制格雷码与自然二进制码的互换(2)

    三、二进制格雷码与自然二进制码互换的实现方法

    1、自然二进制码转换成二进制格雷码

    A)、软件实现法(参见示例工程中的 Binary to Gray)

    根据自然二进制转换成格雷码的法则,可以得到以下的代码:

    static unsigned int DecimaltoGray(unsigned int x)

    {

    return x^(x>>1);

    }

    //以上代码实现了unsigned int型数据到格雷码的转换,最高可转换32位自然二进制码,超出32位将溢出。

    static int DecimaltoGray( int x)

    {

    return x^(x>>1);

    }

    //以上代码实现了 int型数据到格雷码的转换,最高可转换31位自然二进制码,超出31位将溢出。

    上述代码即可用于VC控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用C语言编程,则可以直接利用上述代码,但建议用unsigned int函数。

    2、二进制格雷码转换成自然二进制码

    A)、软件实现法(参见示例工程中的 Gray to Binary )

    根据二进制格雷码转换成自然二进制码的法则,可以得到以下的三种代码方式:

    static unsigned int GraytoDecimal(unsigned int x)

    {

    unsigned int y = x;

    while(x>>=1)

    y ^= x;

    return y;

    }

    static unsigned int GraytoDecimal(unsigned int x)

    {

    x^=x>>16;

    x^=x>>8;

    x^=x>>4;

    x^=X>>2;

    x^=x^1;

    return x;

    }

    static unsigned int GraytoDecimal(unsigned int x)

    {

    int i;

    for(i=0;(1<

    {

    x^=x>>(1<

    }

    return x;

    }

    //以上代码实现了unsigned int型数据到自然二进制码的转换,最高可转换32位格雷码,超出32位将溢出。将数据类型改为int型即可实现31位格雷码转换。

    上述代码即可用于VC控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用C语言编程,则可以直接利用上述代码,但建议用unsigned int函数。

    展开全文
  • 格雷码转换成二进制
  • verilog实现格雷码二进制的转化

    千次阅读 2018-09-27 18:59:52
     自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码二进制码的高位与次高 位相异或,而格雷码其余各位与次高位的求法相类似。   原理: 若二进制码表示为...

    verilog实现格雷码与二进制的转化:

        1)自然二进制码转换为格雷码的方法

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

        原理: 若二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0];

             相应地, 则二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0].

             其中最高位保留: G[N-1] = B[N-1];

             其他各位: G[i] = B[i+1] xor B[i]. (i = 0, 1, 2, ..., n-2)

        图示如下:

           

     

                bin[3]    bin[2]     bin[1]      bin[0]          ---二进制值 : 二进制

             +     0     bin[3]     bin[2]      bin[1]          ---右移值(二进制)


              gray[3]  gray[2]    gray[1]    gray[0]      ---对应的格雷码值

    总结:格雷码的值只需要在原来的二进制的基础上右移一位再异或原来的二进制值即可得到。

    module  binary2grey #(
            parameter   N       =       4
    )(
            input         [N-1: 0]   binary                 ,
            output  wire  [N-1: 0]   grey
    );
    //=====================================================================\
    // ********** Define Parameter and Internal Signals *************
    //=====================================================================/
    
    
    //======================================================================
    // ***************      Main    Code    ****************
    //======================================================================
    assign  grey    =       {1'b0,binary[N-1:1]}^binary;
    
    
    endmodule
    

     2)格雷码转换为二进制码的实现方法

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

        原理: 若二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0];

             相应地, 则二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0].

             其中最高位保留: B[N-1] = G[N-1];

             其他各位: B[i-1] = G[i-1] xor B[i]. (i = 1, 2, ..., n-1)

        图示如下:

      

    module  grey2binary #(
            parameter   N       =       4
    )(
            input         [N-1: 0]   grey                   ,
            output  wire  [N-1: 0]   binary
    );
    //=====================================================================\
    // ********** Define Parameter and Internal Signals *************
    //=====================================================================/
    
    
    
    //======================================================================
    // ***************      Main    Code    ****************
    //======================================================================
    assign  binary[N-1]     =       grey[N-1];
    
    generate
    genvar  i;
        for(i=0;i<N-1;i=i+1) begin:b2g
            assign  binary[i]     =       grey[i]^binary[i+1];
        end
    endgenerate
    
    
    endmodule
    

     

    展开全文
  • 这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造: 1位...加前缀1 n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1 2位格雷码3位格雷码4位格雷码4位自然二进制码0001...
  • 格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进制编码计数组合电路中出现的亚稳态。格雷码常用于通信,FIFO ...
  • 格雷码二进制码互相转换

    千次阅读 2015-04-14 08:24:00
    参考百科:... 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数...
  • 格雷码相邻数字间只相差一
  • * 2、公式法(根据卡诺图建立一个二进制格雷码的每一位的公式) */ //#define test #include #ifdef test #include #endif /** * 二进制转换成格雷码 * @param lStart lValue所在区间下界 * @param ...
  • 格雷码自然二进制码相邻数据之间可能存在多个bit的变化,例如自然数7和8对应的4bits自然二进制码分别“0111”、“1000的输出从7变到8时,寄存器的每一位都会发生变化,从而造成不稳定态,并且会使得数字电路产生很大...
  • 二进制格雷码之间的转换
  • 其法则是: 保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。将求得的二进制数转为十进制数,...
  • 自然二进制:Bn-1Bn-2….B2B1B0 格雷码:Gn-1Gn-2…G2G1G0 自然二进制转格雷码公式: Gi= Bi,i = n-1 Gi= Bixor Bi+1,i = 0:n-2 格雷码转自然二进制:Bi= Gi,i = n-1 ...
  • 格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进制编码计数组合电路中出现的亚稳态。格雷码常用于通信,FIFO或者...
  • 二进制转格雷码 - C语言代码实现

    千次阅读 2018-03-11 22:22:06
    二进制 : 1 0 1 1 1 1 1 0 1 | \ | \ | \ | \ | \ | \ | \ | \ | 格雷码 : 1 1 1 0 0 0 0 1 1 规则: 相与 ^ 1 ^ 0 = 1 1 ^ 1 = 0 0 ^ 0 = 0 // ej : 二进制数组 // gl : 格雷码数组 void...
  • leetcode#89 二进制码转换格雷码 题目: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只...
  • 二进制转格雷码 格雷码转二进制 十进制转二进制 二进制转十进制等,在Delphi xe2下通过测试。格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明...
  • 二进制格雷码互相转换

    千次阅读 2021-03-10 19:12:18
    格雷码,是一种二进制循环码。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进制编码计数组合电路中出现的亚稳态。格雷码常用于通信,异步 FIFO或者 RAM 地址寻址...
  • FPGA 二进制转格雷码

    2021-05-26 13:34:06
    FPGA实验报告 文章目录前言一、概述1、目的及意义:2、主要功能:、原理及步骤1、原理框图:2、工作原理3、功能模块简介4、实验步骤三、程序设计及描述四、...通过本实验复习格雷码转置,学会组件之间的连线。 2、主
  • 自然二进制格雷码之间的转换

    千次阅读 2016-01-27 17:07:20
    二进制数与格雷码的转换公式如下:  G(i) = B(i+1) XOR B(i) ; 0  G(i) = B(i) ; i = N - 1 如果是通过编程计算进行变换,就需要使用这个公式逐位的计算; 如果是使用硬件电路进行变换,就可以使用做而论道...
  • 二进制码转换为格雷码的方法 格雷码转换为二进制码的过程 更多一点讨论之generate for 更多一点讨论之for 最后对格雷码的介绍 前言 以前的博客也有写这方面的内容,只是没有显式的命名,导致查找复习的时候并...
  • 格雷码(Gray)和二进制(Binary)之间的相互转换

    万次阅读 多人点赞 2018-03-08 20:39:16
    格雷码(Gray code)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码...格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情...
  • 进制转格雷码

    2020-11-08 10:38:09
    公式表示: G[i] = B[i] ^ B[i+1](G:格雷码,B:二进制码) 也就是第i位格雷码等于当前二进制位和前面更高为的异或。 那怎么实现让当前位和更高位异或呢? 第一种方法是先把所有的向左移,在把所有位同时异或。 假...
  • 一个二进制数转为格雷码的小程序

    千次阅读 2006-03-22 22:52:00
    一个二进制数转为格雷码的小程序 /*这是一个二进制数转为格雷码的小程序,此计算方法特*/ /*别简单实用,下面以16位双字节为例。 */ /***************************************************/ /* 二进制码转换程序->...
  • 格雷码计数器

    2015-09-09 22:54:00
    简介实现FIFO存储器读写指针比较好的方法就是使用格雷码计数器。格雷码计数器的优势在于其相邻两个数值之间只有一位发生变化,提高了系统的抗干扰能力,而且在计数时,各个输出的...格雷码转二进制格雷码转二进制的...
  • 二进制反射格雷码:这种算法得到的序列不仅是挤压序,而且还是一种最小变化法。下面的算法是使用了数学公式实现的,所以代码量很少,既然有数学公式,何乐而不为呢?难道要像NP问题一样没有公式才好吗?算法的...
  • LeetCode,第160场周赛,题目,题解,链接,Java,难度中等,示例,提示,时间复杂度,空间复杂度,循环码排列,二进制,位运算,无符号右移,格雷码,List,链接,防伪标识。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 762
精华内容 304
关键字:

格雷码转二进制公式