格雷码--编码与解码示例

源程序地址:git://github.com/adream307/GrayCode.git

格雷码的特点是:每个码与他相邻的码之间的海明距离为1。

例如: 0 1 3 2 6 7 5 4

3 的二进制展开为011,而它前一个数1的二进制展开为001,后一个数2的二进制展开为010,这两个数与3在二进制上只相差一位。
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char **argv)
{
   int n,i;
   unsigned long x=1;
   unsigned long y=0;
   unsigned long t=0;
   unsigned long z=0;
   if(argc!=2)
    {
        printf("Usage: graycode n,where n is int and n>0 && n<=31\n");
        return -1;    
    }
    sscanf(argv[1],"%d",&n);
    x=x<<(n-1);
    for(y=0;y<x;++y)
    {
        t = y^(y>>1);
        printf("%lx -- ",t);
        z=t;
        for(i=1;i<n;++i)
        {
            z=z>>1;
            t=t^z;    
        }
        printf("%lx\n",t);
        if(t!=y)
        {
            printf("Error at %lx\n",y);
            return -2;
        }
    }
    return 0;
}




你可能感兴趣的:(格雷码--编码与解码示例)