仕事で必要になったんで、ちょろっと、グレイコード変換クラス、書き起こしてみましたわん!
バグってたら、すまそ(ww
C#:
- 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;
- }
- }
- }


