格雷码简介及格雷码与二进制的转换程序.docVIP

格雷码简介及格雷码与二进制的转换程序.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
格雷码简介及格雷码与二进制的转换程序

格雷码简介及格雷码与二进制的转换程序 格雷码简介  格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码[1] ,因Frank Gray于1953年申请专利“Pulse Code Communication”得名。当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4] 。   典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便[5] 。   格雷码属于可靠性编码,是一种错误最小化的编码,因为它大大地减少了由一个状态到下一个状态时电路中的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于模-数转换中,当模拟量发生微小变化而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性.这就允许代码电路能以较少的错误在较高的速度下工作。   格雷码在现代科学上获得了广泛的应用,人们还发现智力玩具九连环的状态变化符合格雷码的编码规律,汉诺塔的解法也与格雷码有关。   除了已知的特点,格雷码还有一些鲜为人知的性质。多数数字电子技术和计算机技术的文献认为格雷码是无权码,只有J.F.A. Thompson认为可以从格雷码直接转换成十进制数[6]。如果将格雷码的“权”及格雷码的奇偶性等性质在数学上给予证明,将有助于格雷码研究与应用的发展,有助于自动化技术的发展,还可有助于计算机科学的发展。 格雷码与二进制的转换程序 ?* 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数(1~31位) ?* 推导方式如下(以三位格雷码为例): ?* 序号 格雷码 格雷码实值 二进制码 二进制实值 ?*? 0? 000?? 0?? 000?? 0 ?*? 1? 001?? 1?? 001?? 1 ?*? 2? 011?? 3?? 010?? 2 ?*? 3? 010?? 2?? 011?? 3 ?*? 4? 110?? 6?? 100?? 4 ?*? 5? 111?? 7?? 101?? 5 ?*? 6? 101?? 5?? 110?? 6 ?*? 7? 100?? 4?? 111?? 7 ?*???? 由上面的数据可看出.如果,按照序方式遍历格雷码.其编 ?* 码实值是按自然数顺序排列.反之,如果按此顺序遍历其二进制实值.则会发 ?* 现遍历过的数据的个数减一即为二进制码所对应格雷码的实值.再观察序号 ?* 顺序,我们会发现: 如果把二进制码分半,前半部分从前向后遍历,后半部分 ?* 从后向前遍历.如果分半部分可再分,则再将其分半.并按照前半部分从前向 ?* 后遍历(分解),后半部分从后向前遍历的方式遍历(分解).直到不可分.即可 ?* 实现按序号所描述顺序遍历二进制码.如果,按此顺序遍历二进制码,我们可 ?* 以很方便地在序列中找到所要的二进制码与其对应的格雷码.本思想可以很 ?* 方便地用递归实现.这样就实现了二进制到格雷码的转换.同样,格雷码到二 ?* 进制的转换,也可以用相同的方法推出.为了加快运算,我们跳过不必要的遍 ?* 历将递归改为递推.这样就实现了格雷码与二进制之间的快速转换. ?* 此算法的时间复杂度约为O(n),n为要转换数据的BIT数. ?* ***************************************************************** ?*? 补充说明: ?*? 其它的转换方法还有 ?*??? 1、查表法(建立一个二进制与格雷码的对应表) ?*??? 2、公式法(根据卡诺图建立一个二进制到格雷码的每一位的公式) ?*/ ? //#define test #i nclude stdio.h #ifdef test ?#i nclude time.h #endif /** ?* 二进制转换成格雷码 ?* @param lStart lValue所在区间下界 ?* @param lEnd lValue所在区间上界 ?* @param lValue 要转换的二进制数的实值 ?* @return 返回格雷码对应的二进制数的实值 ?* @see g2b() g2b 格雷码转换二进制 ?* @see BtoG() BtoG 二进制转换格雷码 ?* @see GtoB() BtoG 格雷码转换二进制 ?* @author 黄毅 ?* @useage a=b2g(0,15,4); //取得4所对应格雷码的二进制值 结果a等于6 ?* @memo

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档