在一組數的編碼中,若任意兩個相鄰的代碼只有一位二進制數不同,則稱這種編碼為格雷碼(Gray Code),格雷碼由0和1組成,由二進制碼演化而成。
格雷碼生成方法如下:
-
1位格雷碼有兩個碼字
-
(n+1)位格雷碼中的前2 n個碼字等於n位格雷碼的碼字,按順序書寫,加前綴0
-
(n+1)位格雷碼中的后2 n個碼字等於n位格雷碼的碼字,按逆序書寫,加前綴1
舉例如下:
1位格雷碼:
0
1
2位格雷碼:
總共有2^2個碼字,前一半的碼字為1位的格雷碼按順序書寫加前綴0,后一半的碼字為1位格雷碼逆序書寫加前綴1,結果如下:
00
01
11
10
3位格雷碼為:
在2位格雷碼的基礎上結果如下:
000
001
011
010
110
111
101
100
同理可以得出n位的格雷碼。
二進制轉化成格雷碼:
原則是保留二進制碼的最高位作為格雷碼的最高位,格雷碼的次高位為二進制編碼的最高位和次高位相異或,格雷碼的其他位和次高位的求法類似。
Binary Code :1011 要轉換成Gray Code
1011 = 1(照寫第一位), 1(第一位與第二位異或 1^0 = 1), 1(第二位異或第三位, 0^1=1), 0 (1^1 =0) = 1110
其實就等於 (1011 >> 1) ^ 1011 = 1110