您的位置:首页 > 其它

也谈自动生成格雷码算法

2017-11-08 11:27 204 查看
  工作10年了,总觉得自己是不是应该学点什么。今天突发奇想,是不是可以用程序来自动生成格雷码?

  百度了一下,发现网上的例子都晦涩难懂。看了看百度百科的例子,也依然一头雾水。正郁闷着呢,发现其上有一张说明格雷码跟二进制码的关系图。一下茅塞顿开。图片如下:



   其实只要看懂了这张图,格雷码的编解码都是小菜一碟。格雷码的每一个位其实都是对应二进制码的位跟其较高位的异或。简单说就是g0 = b1 ^ b0;

   拿起gcc就开始写,编码函数就这么完成了。

int grayencode(int x)
{

return x^(x>>1);
}

  然后就是解码了,解码相对复杂点。当然有了编码程序,你也可以用穷举的办法。但这里其实可以不用穷举。将上图中的过程反过来,对于N位的格雷码解码程序如下。

int graydecode(int x)

{
int i, y=0;
for (i = N-1; i >= 0; i--)
y |= (x&(1<<i)) ^ ((y>>1)&(1<<i));
return y;

}

在wiki上发现一个解码程序写的非常好。就是不清楚具体是怎么来的。

unsigned int graydecode(unsigned int num)

{

unsigned int mask = num;

while (mask != 0)

{

  mask >>= 1;

  num ^= mask;

}

return num;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: