也谈自动生成格雷码算法
来源:互联网 发布:软件登记在哪里办理 编辑:程序博客网 时间:2024/06/05 05:59
工作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;
}
{
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;
}
阅读全文
0 0
- 也谈自动生成格雷码算法
- 自动生成格雷码算法
- 也谈Eclipse未自动在gen目录下生成R.java
- 也谈KMP算法
- 也谈代码生成-----必要性
- Cppunit也有自动生成测试用例的框架
- 也谈生成不重复的随机数系列(洗牌算法)
- 自动生成格雷码
- 微博用户标签自动生成算法
- 任意多边形三维屋顶自动生成算法
- 微博用户标签自动生成算法
- 【PB】也谈数据窗口自动换行
- 也谈代码生成-----(实用性、灵活性)
- 也谈orm和代码生成
- 也谈代码生成-----(存储过程生成工具基本原理)
- 计算机自动生成论文被IEEE收录,其虚拟作者也称主席团成员
- 建立动态库dll工程时候也会自动生成静态库lib
- 打“补丁”也自动
- 《机器学习》第七章笔记
- Uri使用总结
- Android开发之贝塞尔曲线进阶篇(仿直播送礼物,饿了么购物车动画)
- 2016NOIP普级组第二题--回文日期(参考洛谷题解)
- vue打包------部署到子目录 or 合并到原生app中
- 也谈自动生成格雷码算法
- 《面试之排序算法性能比较》
- 字符串 正则表达式的模式匹配
- 6763 对焦不能用
- Python 爬虫学习笔记一: requests 模块
- String类replaceAll方法正则替换深入分析
- JIBX的工具使用
- 享元模式防止同一个activity弹出多个提示框
- 反转一个整数