例如:N=3
000 001 011 010 110 111 101 100哈哈! 好像是一個蠻奇特的發現嘛, 可是這到底有什麼用呢? 不會只是數字的遊戲吧!
舉一個簡單的應用來說吧, 在控制或是通訊的領域裡, 有時候我們會需要將數位化的資訊轉換為 類比的控制訊號, 而數位化的資訊又可以由程式來控制更改, 如果有一個連續性的訊號, 比方說由 3 變成 4, 如果我們用一般二進位的方式來表示, 那就是 011 變成 100, 你可以注意到三個位元同時有變動, 從硬體的角度來看, 這三個位元哪一個先完成變動是不一定的, 假設第一個位元先變成 1, 也就是變成 111 了, 雖然很快地第二和第三個位元就會變成 0, 但是 111 這個暫時的狀態是很突兀的, 有可能會造成控制系統的不穩定, 而在 Gray code 系統中, 任何時候都不會出現暫時的狀態。
以下面的這組 N=4 的 Gray code 來說, 你可以發現一些規則:
0000 0001 <== 改變前一個數字的 LSB 0011 <== 改變前一個數字最右邊的 1 的左邊那個位元 0010 <== 改變前一個數字的 LSB 0110 <== 改變前一個數字最右邊的 1 的左邊那個位元 0111 <== 改變前一個數字的 LSB 0101 <== 改變前一個數字最右邊的 1 的左邊那個位元 0100 <== 改變前一個數字的 LSB 1100 <== 改變前一個數字最右邊的 1 的左邊那個位元 1101 <== 改變前一個數字的 LSB 1111 <== 改變前一個數字最右邊的 1 的左邊那個位元 1110 <== 改變前一個數字的 LSB 1010 <== 改變前一個數字最右邊的 1 的左邊那個位元 1011 <== 改變前一個數字的 LSB 1001 <== 改變前一個數字最右邊的 1 的左邊那個位元 1000 <== 改變前一個數字的 LSB
回
程式設計課程
首頁
製作日期: 99/10/19
by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw