整数をグレイ(Gray)符号に変換する


関数名
num2gray  整数をグレイ符号に変換する
形式
unsigned num2gray(unsigned num);
引数
num  整数
関数値
整数に対応するグレイ符号
注意事項

用例(num2gray-test.c
num2gray(7);

プログラム(num2gray.c
unsigned num2gray(unsigned num)
{
    unsigned mask;
    int      flag;
    
    flag = 0;
    for (mask = 1 << (sizeof(unsigned) - 1); mask != 0; mask >>= 1) {
        if (flag) num ^= mask;
        if (num & mask) flag = !flag;
    }
    return num;
}
説明
グレイ(Gray)符号は、たとえば 0〜7 の状態を順次
   000, 001, 011, 010, 110, 111, 101, 100
で表現する。つまり、隣同士の違いは1ビットだけである。

整数に対応するグレイ符号を求めるには、上位のビットから順に 見ていき、1のビットが現れたらつぎのビットを反転させる。反 転したビットがまた1なら、そのつぎのビットは反転しない。

関連関数
グレイ符号を整数に変換する