zoukankan      html  css  js  c++  java
  • 格雷码与二进制的转换

    http://blog.csdn.net/jingfengvae/article/details/51691124

    一、什么是格雷码?

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

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

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

    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位格雷码转换。
       
     
  • 相关阅读:
    生成PDF文档
    2016 百度研发岗面试总结
    有趣的数
    2016阿里校招python研发面试
    python 快排,堆排,归并
    三种简单的排序写下贴上
    BestCoder Round #47 1003
    c++ 适配器
    微信公众平台-超级大赛问题汇总1
    正则表达式简单总结
  • 原文地址:https://www.cnblogs.com/aabbcc/p/6160517.html
Copyright © 2011-2022 走看看