このブログ「吟遊詩人の戯言」 の記事検索...

グレイコード変換

関連記事

仕事で必要になったんで、ちょろっと、グレイコード変換クラス、書き起こしてみましたわん!

バグってたら、すまそ(ww

using System;
using System.Collections.Generic;
using System.Text;

namespace bMountLibrary
{
    public class GrayCode
    {
        public GrayCode()
        {
        }
        
        private const uint MASK_PATTERN = 0x00000001;

        //-----------------------------------
        //バイナリをグレイコードへ変換
        //
        // dat      : 元のバイナリ値
        //
        // return   : グレイコード
        //-----------------------------------
        static public uint BinToGrayCode(uint dat)
        {
            return dat ^ (dat >> 1) ;
        }
        
        //-----------------------------------
        //グレイコードをバイナリへ変換
        //
        // dat      : 元のグレイコード値
        // bitCount : 有効ビット数(1~32)
        //
        // return   : バイナリ値
        //-----------------------------------
        static public uint GrayCodeToBin(uint dat, int bitCount)
        {
            uint result = 0;
            uint mask1;
            uint mask2;
            uint tmp1;
            uint tmp2;

            if ((bitCount < 1) || (bitCount > 32))
            {
                return 0;
            }

            uint mask = MASK_PATTERN << (bitCount - 1);

            result = dat & mask;

            for (int i = 1 ; i < bitCount; i++)
            {
                mask1 = (mask >> (i -1));
                mask2 = (mask >> (i   ));

                tmp1 = result & mask1;
                tmp2 = dat    & mask2;

                if ((tmp1 != 0) && (tmp2 == 0))
                {
                    result |= mask2;
                }

                if ((tmp1 == 0) && (tmp2 != 0))
                {
                    result |= mask2;
                }

            }

            return result;
        }

    }
}

 
 
 
 

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">