二进制雷格码(Binary Gray Code)

作者:追风剑情 发布于:2017-11-22 15:47 分类:Algorithms

示例


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test5
{
    class Program
    {
        static void Main(string[] args)
        {
            /**
             * 雷格码特点
             * 1.任意相邻的两个码只有1位二进制数不同
             * 2.最大数与最小数之间也仅有1位二进制数不同(即,首尾相连)
             */

            Console.WriteLine("二进制  格雷码->二进制");
            Console.WriteLine("abcd    efgh");//abcd efgh表示对应的列
            //二进制码转雷格码公式为: e=a, f=a^b, g=b^c, h=c^d
            //雷格码转二进制码公式为: a=e, b=e^f, c=e^f^g, d=e^f^g^h

            for (int i = 0; i < 16; i++){
                int grayCode = DecimalToGray(i);
                Console.WriteLine(string.Format("{0}    {1}    {2}", IntToBinary(i, 4), IntToBinary(grayCode, 4), IntToBinary(GrayToDecimal(grayCode), 4)));
            }

            Console.WriteLine("二进制码转雷格码公式为: e=a, f=a^b, g=b^c, h=c^d");
            Console.WriteLine("雷格码转二进制码公式为: a=e, b=e^f, c=e^f^g, d=e^f^g^h");
            Console.Read();
        }

        //二进制码转格雷码
        public static int DecimalToGray(int x)
        {
            return x^(x>>1);
        }

        //格雷码转二进制码
        //写法一
        //更多代码写法参考: http://blog.csdn.net/jingfengvae/article/details/51691124
        public static int GrayToDecimal(int x)
        {
            int y = x;
            while((x>>=1) > 0)
                y ^= x;
            return y;
        }

        //格雷码转二进制码
        //写法二
        public static int GrayToDecimal2(int x)
        {
            x ^= (x >> 1);
            x ^= (x >> 2);
            x ^= (x >> 4);
            x ^= (x >> 8);
            x ^= (x >> 16);
            return x;
        }


        //整数转二进制串
        public static string IntToBinary(int val, int bits = 32)
        {
            string final = "";

            for (int i = bits; i > 0; )
            {
                if (i == 8 || i == 16 || i == 24) final += " ";
                final += ((val & (1 << --i)) != 0) ? '1' : '0';
            }
            return final;
        }
    }
}


运行测试

111111.png

标签: Algorithms

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号