グレイコード変換

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

バグってたら、すまそ(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;
        }

    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください