【格雷码】
2018-06-18 04:09:17来源:未知 阅读 ()
/* 格雷码 说明: Gray Code是一个数列集合 ,每个数使用二进位来表示 ,假设使用n位元来表示每个数好了 ,任两个数之间只有一个位元值不同, 例如以下为3位元的Gray Code: 000 001 011 010 110 111 101 100 由定义可以知道,Gray Code的顺序并不是唯一的,例如将上面的数列反过来写,也是一组GrayCode: 100 101 111 110 010 011 001 000 Gray Code是由贝尔实验室的Frank Gray在1940年代提出的,用来在使用PCM(Pusle CodeModulation)方法传送讯号时避免出错, 并于1953年三月十七日取得美国专利。 解法: 由于Gray Code相邻两数之间只改变一个位元,所以可观 察Gray Code从1变0或从0变1时的位置,假设有4位元的Gray Code如下: 0000 0001 0011 0010 0110 0111 0101 1000 1100 1101 1111 1110 1010 1011 1001 1000 观察奇数项的变化时,我们发现无论它是第几个Gray Code,永远只改变最右边的位元,如果是1就改为0,如果是0就改为1。 观察偶数项的变化时,我们发现所改变的位元,是由右边算来第一个1的左边位元。 以上两个变化规则是固定的,无论位元数为何;所以只要判断位元的位置是奇数还是偶数,就可以决定要改变哪一个位元的值,为了 程式撰写方便,将阵列索引 0当作最右边的值,而在列印结果时,是由索引数字大的开始反向列印。 将2位元的Gray Code当作平面座标来看,可以构成一个四边形,您可以发现从任一顶点出发,绕四边形周长绕一圈,所经过的顶点座 标就是一组Gray Code,所以您可以得到四组GrayCode。 同样的将3位元的Gray Code当作平面座标来看的话,可以构成一个正立方体,如果您可以从任一顶点出发,将所有的边长走过,并不 重复经过顶点的话,所经过的顶点座标顺序之组合也就是一组Gray Code。 */ #include<stdio.h> #include<stdlib.h> #define MAXBIT 20 #define TRUE 1 #define CHANGE_BIT(x) x = ((x) == '0' ? '1':'0') #define NEXT(x) x = (1 - (x)) int main(void) { char digit[MAXBIT]; int i, bits, odd; printf("输入位元数:"); scanf("%d", &bits); for(i = 0; i < bits; i++) { digit[i] = '0'; printf("0"); } printf("\n"); odd = TRUE; while(1) { if(odd) { CHANGE_BIT(digit[0]); } else { for(i = 0; i < bits && digit[i] == '0'; i++); if(i == bits - 1) { break; } CHANGE_BIT(digit[i+1]); } for(i = bits - 1; i >= 0; i--) { printf("%c", digit[i]); } printf("\n"); NEXT(odd); } return 0; }
运行结果:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:【m元素集合的n个元素子集】
- 关于类的几点说明 2019-03-13
- (C/C++学习)17.bitset(位操作) 2018-11-12
- 1032 挖掘机技术哪家强 2018-09-29
- 函数指针--全局函数指针与类的函数指针(二) 2018-07-13
- c++文件编译的一些说明 2018-06-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash