グレイコード
電気接点式のロータリエンコーダについて考える。
金属などの導体をむき出しにしたパターンを円盤に付け、それを複数のブラシで読み取り角度を得るものとする。この時、角度が変化して丁度境目の部分にブラシがあると、接触が不安定で、読み取りデータが1になるかもしれないし0になるかもしれない。しかし、左の図のようにグレイコードを基にしたパターンを使用すれば、不安定になるビットは必ず1ビットだけであり、角度の検出としては安定した結果を得られる。
通常の二進表現をグレイコードに変換するには、「対象の二進表現」と、「それを1ビット右シフトし、先頭に0をつけたもの」との排他的論理和をとる。例えば、変換したい対象が10(十進法で)であれば、二進法で表現すれば「1010」であるから、それと「0101」との排他的論理和をとった、「1111」がグレイコードによる表現である。プログラミング言語では、例えばC言語では、v ^ (v >> 1) となる。
逆にグレイコードを通常の二進表現に変換するには、「グレイコードによる表現」の最上位桁から順に最下位桁へ向かって隣の桁との排他的論理和をとる。(ただし最上位桁のみその値を適用する。)例えば、グレイコードによる表現が「1111」であれば、最上位桁から「1」、その値(1)と次の桁(1)との排他的論理和をとり「0」、その値(0)と次の桁(1)との排他的論理和をとり「1」、その値(1)と次の桁(1)との排他的論理和をとり「0」、と順次各桁を確定し、「1010」が二進法による表現である。
n進グレイコード(英: n-ary Gray code n進グレイ符号)とは交番n進符号(こうばんえぬしんふごう)、ノンブーリアングレイコード(英: non-Boolean Gray code ノンブーリアングレイ符号)ともいい、グレイコードの二進法からn進法(位取り記数法)への拡張である。
(n, k)グレイコードはn進グレイコードのkビットでの表記を意味する。
三進法での拡張グレイコード、三進グレイコードでは0、1、2を用いる。2ビットでは{00, 01, 02, 12, 10, 11, 21, 22, 20}である。
位相偏移変調において、差動(差分)位相偏移変調(DPSK)や四位相偏移変調(QPSK)のアルゴリズムに応用されている。
前後に隣接する符号間のハミング距離が必ず1であるという特性を持つ符号化は、グレイコードだけではない。ここでは、十進法との相性を考慮した符号化である、Glixon code、O'Brien codes、Petherick code、Tompkins codeを紹介する。