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


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

用例(gray2num-test.c
gray2num(0x7);

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

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