Gray code 的学习

来源:互联网 发布:单片机串行通信 编辑:程序博客网 时间:2024/05/20 15:39
根据格雷码的特点,即:对于两个相邻的十进制数,对应的两个格雷码只有一个二进制位不同。另外,最大数与最小数间也仅有一个二进制位不同。以下给出用长度n的二进制数来表示十进制数m的格雷码c实现,运行结果如右图所示:
 

#include<stdio.h>
#include<stdlib.h>

main()
{ int m,n,i,j,b,p,bound;    
  int gr[14];     //输入n,m并判断m是否合法    
  bound=1;    
  printf("Please input two number:n,m\n");    
  scanf("%d,%d",&n,&m);    
  for(i=1;i<=n;i++)    
  bound*=2;    
  if(m<0||m>=bound)    
     {printf("Data error!");        
      exit(0);    //跳转到系统   
     }  //加if语句的原因是长度为5的二进制数能表示的最大十进制数是2^5=32.

  b=1;    
  for(i=0;i<n;i++)  //该for语句显示了gray code的核心思想
     {p=0;        
      b*=2;        
      for(j=0;j<=m;j++)
         { if(j%b-b/2==0)            
           p=1-p;        
         }        
      gr[i]=p;    
     }    
  printf("m=");    
  for(i=n-1;i>=0;i--)
     {        
      printf("%d",gr[i]);
     }    
  printf("\n");
  //C++运行结果不显示一闪而过的解决方案
  system("pause");
  return 0;  //跳转到函数
 
}

原创粉丝点击