グレイコード→バイナリコードの変換

グレイコードによる2進数表現は, 一旦バイナリコードによる2進数表現に変換する必要がある.

例として,グレイコードの 10100101は, どのようにバイナリコードに変換されるのかを示す.

まず,赤線で示すように,最上位ビットはグレイコードとバイナリーコードで 常に同じである. さらに,それ以外のビットについては,青線で示すように, 該当するグレイコードのビットと,ひとつ上位のバイナリコードのビットの 排他的論理和によって算出できる. 排他的論理和は(0,1)(1,0)の時に1となり,(0,0)(1,1)の時に0となる. C言語では「^」である.

このように計算すると,グレイコードの 10100101は, バイナリコードの 11000110となることがわかる. つまり,グレイコードの165(10100101)は, バイナリコードの198(11000110)に相当する.

以上で述べた,グレイコード→バイナリコードの変換ルーチンは 数行のC言語で書けるので,ビット演算の練習も兼ねて自分で書いて欲しい. ただし,実験が遅れている班は,(本来は望ましくはないが) 以下の変換テーブルを用いても良い.


static unsigned char gray2binary[]={
  0,  1,  3,  2,  7,  6,  4,  5, 15, 14, 12, 13,  8,  9, 11, 10,
 31, 30, 28, 29, 24, 25, 27, 26, 16, 17, 19, 18, 23, 22, 20, 21,
 63, 62, 60, 61, 56, 57, 59, 58, 48, 49, 51, 50, 55, 54, 52, 53,
 32, 33, 35, 34, 39, 38, 36, 37, 47, 46, 44, 45, 40, 41, 43, 42,
127,126,124,125,120,121,123,122,112,113,115,114,119,118,116,117,
 96, 97, 99, 98,103,102,100,101,111,110,108,109,104,105,107,106,
 64, 65, 67, 66, 71, 70, 68, 69, 79, 78, 76, 77, 72, 73, 75, 74,
 95, 94, 92, 93, 88, 89, 91, 90, 80, 81, 83, 82, 87, 86, 84, 85,
255,254,252,253,248,249,251,250,240,241,243,242,247,246,244,245,
224,225,227,226,231,230,228,229,239,238,236,237,232,233,235,234,
192,193,195,194,199,198,196,197,207,206,204,205,200,201,203,202,
223,222,220,221,216,217,219,218,208,209,211,210,215,214,212,213,
128,129,131,130,135,134,132,133,143,142,140,141,136,137,139,138,
159,158,156,157,152,153,155,154,144,145,147,146,151,150,148,149,
191,190,188,189,184,185,187,186,176,177,179,178,183,182,180,181,
160,161,163,162,167,166,164,165,175,174,172,173,168,169,171,170};