格雷码转十进制 c语言,格雷码的转换方法
這種方法基于格雷碼是反射碼的事實,利用遞歸的如下規則來構造: 1位格雷碼有兩個碼字 (n+1)位格雷碼中的前2n個碼字等于n位格雷碼的碼字,按順序書寫,加前綴0 (n+1)位格雷碼中的后2n個碼字等于n位格雷碼的碼字,按逆序書寫,加前綴1 n+1位格雷碼的集合 = n位格雷碼集合(順序)加前綴0 + n位格雷碼集合(逆序)加前綴1 2位格雷碼3位格雷碼4位格雷碼4位自然二進制碼00
01
11
10 000
001
011
010
110
111
101
100 0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000 0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111 二進制碼→格雷碼(編碼):
此方法從對應的n位二進制碼字中直接得到n位格雷碼碼字,步驟如下: 對n位二進制的碼字,從右到左,以0到n-1編號 如果二進制碼字的第i位和i+1位相同,則對應的格雷碼的第i位為0,否則為1(當i+1=n時,二進制碼字的第n位被認為是0,即第n-1位不變) 公式表示:(G:格雷碼,B:二進制碼) 例如:二進制碼0101,為4位數,所以其所轉為之格雷碼也必為4位數,因此可取轉成之二進位碼第五位為0,即0 b3 b2 b1 b0。
0 xor 0=0,所以g3=0
0 xor 1=1,所以g2=1
1 xor 0=1,所以g1=1
0 xor 1=1,所以g0=1
因此所轉換為之格雷碼為0111 格雷碼→二進制碼(解碼):
從左邊第二位起,將每位與左邊一位解碼后的值異或,作為該位解碼后的值(最左邊一位依然不變)。依次異或,直到最低位。依次異或轉換后的值(二進制數)就是格雷碼轉換后二進制碼的值。
公式表示:(G:格雷碼,B:二進制碼)
原碼:p[n:0];格雷碼:c[n:0](n∈N);編碼:c=G(p);解碼:p=F(c);
書寫時按從左向右標號依次減小,即MSB->LSB,編解碼也按此順序進行 舉例:
如果采集器器采到了格雷碼:1010
就要將它變為自然二進制:
0 與第四位 1 進行異或結果為 1
上面結果1與第三位0異或結果為 1
上面結果1與第二位1異或結果為 0
上面結果0與第一位0異或結果為 0
因此最終結果為:1100 這就是二進制碼即十進制 12
當然人看時只需對照表1一下子就知道是12 ...................c[n]=p[n],
解碼: 利用卡諾圖相鄰兩格只有一位變化以及卡諾圖的變量取值以低階格雷碼的順序排布的特征,可以遞歸得到高階格雷碼。由于此方法相對繁瑣,使用較少。生成格雷碼的步驟如下: 將卡諾圖變量分為兩組,變量數目相近(最好相等) 以邏輯變量高位在左低位在右建立卡諾圖 從卡諾圖的左上角以之字形到右上角最后到左下角遍歷卡諾圖,依次經過格子的變量取值即為典型格雷碼的順序 三位格雷碼(三位格雷碼由建立在二位基礎上) AB╲ C 0 1 00 0→ 1↓ 01 ↓2 ←3 11 6→ 7↓ 10 4 ←5 格雷碼次序:000起點→001→011→010→110→111→101→100終點
四位格雷碼 AB╲CD 00 01 11 10 00 0→ 1→ 3→ 2↓ 01 ↓4 ←5 ←7 ←6 11 12→ 13→ 15→ 14↓ 10 8 ←9 ←11 ←10 格雷碼次序:0000起點→0001→0011→0010→0110→0111→0101→0100→1100→1101→
1111→1110→1010→1011→1001→1000終點 用異或代替加減進行二進制豎式乘除,稱為異或乘除,它的特點是無進退位。
如:10101除以11將變成1100余1。
二進制轉格雷碼:
只要異或乘以二分之三,即二進制的1.1,然后忽略小數部分;也可以理解成異或乘以三(即11),再右移一位。
格雷碼轉二進制:
異或除以三分之二,即除以1.1,忽略余數;或者左移一位,再異或除以三,忽略余數。
總結
以上是生活随笔為你收集整理的格雷码转十进制 c语言,格雷码的转换方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础总结之常用内置方法总结
- 下一篇: 【MySQL 】学习笔记千行总结