转 格雷码 2421码转格雷码

格雷码(Graycode)是由贝尔实验室的FrankGray在1940年提出,用于在PCM(脉冲编码调变)方法传送讯号时防止出错,并于1953年三月十七日取得美国专利。格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。
格雷码(GrayCode)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。例如以下为3位元的格雷码:000 001 011 010110 111 101 100 。如果要产生n位元的格雷码,那么格雷码的个数为2^n.
假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右边的位元值;第二步,改变右起第一个为1的位元的左边位元;第三步,第四步重复第一步和第二步,直到所有的格雷码产生完毕(换句话说,已经走了(2^n)- 1 步)。
用一个例子来说明:假设产生3位元的格雷码,原始值位 000第一步:改变最右边的位元值:001第二步:改变右起第一个为1的位元的左边位元:011第三步:改变最右边的位元值: 010第四步:改变右起第一个为1的位元的左边位元: 110第五步:改变最右边的位元值: 111第六步:改变右起第一个为1的位元的左边位元: 101第七步:改变最右边的位元值: 100
如果按照这个规则来生成格雷码,是没有问题的,但是这样做太复杂了。如果仔细观察格雷码的结构,我们会有以下发现:1、除了最高位(左边第一位),格雷码的位元完全上下对称(看下面列表)。比如第一个格雷码与最后一个格雷码对称(除了第一位),第二个格雷码与倒数第二个对称,以此类推。2、最小的重复单元是 0 ,1
000
001
011
010
110
111
101
100

所以,在实现的时候,我们完全可以利用递归,在每一层前面加上0或者1,然后就可以列出所有的格雷码。比如:第一步:产生 0, 1 两个字符串。第二步:在第一步的基础上,每一个字符串都加上0和1,但是每次只能加一个,所以得做两次。这样就变成了00,01,11,10 (注意对称)。第三步:在第二步的基础上,再给每个字符串都加上0和1,同样,每次只能加一个,这样就变成了000,001,011,010,110,111,101,100。好了,这样就把3位元格雷码生成好了。如果要生成4位元格雷码,我们只需要在3位元格雷码上再加一层0,1就可以了:0000,0001,0011,0010,0110,0111,0101,0100,1100,1101,1110,1010,0111,1001,1000.
也就是说,n位元格雷码是基于n-1位元格雷码产生的。
如果能够理解上面的部分,下面部分的代码实现就很容易理解了。[java]view plaincopy
  1. publicString[]GrayCode(intn){
  2. //produce2^ngradecodes
  3. String[]graycode=newString[(int)Math.pow(2,n)];
  4. if(n==1){
  5. graycode[0]="0";
  6. graycode[1]="1";
  7. returngraycode;
  8. }
  9. String[]last=GrayCode(n-1);
  10. for(inti=0;i<last.length;i++){
  11. graycode[i]="0"+last[i];
  12. graycode[graycode.length-1-i]="1"+last[i];
  13. }
  14. returngraycode;
  15. }
格雷码还有一种实现方式是根据这个公式来的 G(n) =B(n) XOR B(n+1),这也是格雷码和二进制码的转换公式。代码如下:[java]view plaincopy
  1. publicvoidgetGrayCode(intbitNum){
  2. for(inti=0;i<(int)Math.pow(2,bitNum);i++){
  3. intgrayCode=(i>>1)^i;
  4. System.out.println(num2Binary(grayCode,bitNum));
  5. }
  6. }
  7. publicStringnum2Binary(intnum,intbitNum){
  8. Stringret="";
  9. for(inti=bitNum-1;i>=0;i--){
  10. ret+=(num>>i)&1;
  11. }
  12. returnret;
  13. }
这是一道google 的面试题,以上代码均是网友peking2和 SEwind520写成。原题还要求把二进制码转成十进制数。参考:http://www.mitbbs.com/article_t/JobHunting/32003667.html
转载请注明出处:blog.csdn.net/beiyeqingteng
[转]格雷码 2421码转格雷码

格雷码转换快速方法

(假设以二进制为0的值做为格雷码的0)  G:格雷码B:二进位码  G(N)= B(n+1) XOR B(n)

格雷码转二进位数

  二进位码第n位= 二进位码第(n+1)位时异或格雷码第n位。因为二进位码和格雷码皆有相同位数,所以二进位码可从最高位的左边位元取0,以进行计算。  例如:格雷码0111,为4位数,所以其所转为之二进位码也必为4位数,因此可取转成之二进位码第五位为0,即0b3 b2 b1 b0。  0xor 0=0,所以b3=0  0xor 1=1,所以b2=1  1xor 1=0,所以b1=0  0xor 1=1,所以b0=1  因此所转换为之二进位码为0101

  

爱华网本文地址 » http://www.aihuau.com/a/25101010/27362.html

更多阅读

edius5.0教程全集 edius5.0视频转码教程

edius5.0教程全集——简介一、 剪辑操作实例二、 视频滤镜应用实例三、 键效果实例四、 特殊使用特技转场五、 多时间线嵌套的应用六、 音频编辑实例七、 字幕实例edius5.0教程全集——工具/原料最好先卸载电脑上的暴风影音,

怎么用暴风影音转码 新版快手怎么保存视频

利用暴风影音转码。下载的电影怎样利用暴风影音来转换码?在暴风影音上下载的电影怎样转换成别的格式?怎么用暴风影音转码——工具/原料暴风影音怎么用暴风影音转码——步骤/方法怎么用暴风影音转码 1、打开暴风影音播放器,找到转码栏

超级转霸TotalVideoConverter3.61+有效注册码 mkv converter 注册码

 超级转霸(英文名E.M. Total Video Converter)提供视频转换文件的终极解决方案,它能够读取和播放各种视频和音频文件,并且将他们转换为流行的媒体文件格式。它内置一PDA、PSP、iPOD使用的便携视频、音频格式(mp4、3gp、xvid、divxmpeg4

Slash的設備,音色和風格技巧 转帖自GC备用 colorslashmotion

我自己受到Slash風格的影響很深,所以一直都在研究Slash的設備, 樂理和技巧.來了GC也有一段日子了, 有見國內有關資訊闕如, 故今次找來一些較為可信並有用的資料,希望能解答到不少人對Slash風格的疑惑.-----------------------------

转载 安娜情欲史AllAboutAnna请勿转贴 第三世界迅雷转贴区

原文地址:安娜情欲史AllAboutAnna[请勿转贴]作者:少言导演:杰西卡·尼尔森Jessica Nilsson主演:格瑞·贝 Gry Bay 马克·斯蒂文斯 Mark Stevens 艾琳·达丽 Eileen Daly出品:丹麦年代:2005李敖说:“男女之间的问题只有快乐的问题,没有鼻涕

声明:《转 格雷码 2421码转格雷码》为网友笙歌歇尽分享!如侵犯到您的合法权益请联系我们删除