您的位置:首页 > 其它

不同进制数的转换及应用

2018-01-07 10:59 288 查看
 在计算机领域中,有时需要将十进制数转换为二进制、八进制、十六进制的数;有时又需要逆向转换将二进制、八进制和十六进制的数转换为十进制或它们相互之间进行转换.

         不同进制转换的基本算法是:

         (1) 十进制(x)转换为任意进制数(n)的方法:将十进制数除以n进制反序取余.

         (2) 将任意进制数转换为十进制数方法:按“权”展开求和.

         (3) 二进制、八进制、十六进制之间的转换方法:利用3位二进制表示1位八进制数,用4位二进制数表示一位1位十六进制数的方法.

         1、将十进制转换为任意进制(设进制n<10)

短除法:(39)10=(100111)2             
(245)10=(365)8


 

         示例Code:

        /// <summary>

        /// 接受2个参数,val1是需要转换的十进制数,val2是需要转换的进制(10以下的)

        /// </summary>
        protected String ZhuanHuan(Int32 val1, Int32 val2)

        {

            if (val2 >= 10 || val2 < 2)

                return "请输入2到9之间的整数";

            if (val1 == 0)

                return "0";

            IList<Int32> yuList = new List<Int32>();     //用来存储余数
            Int32 yuShu;

            try

            {

                while (val1 > 0)

                {

                    yuShu = val1 % val2;

                    yuList.Add(yuShu);

                    val1 = val1 / val2;

                }

                StringBuilder strOut = new StringBuilder();

                strOut.Append(String.Format("转换为{0}进制的结果为:",val2));

                if (yuList != null && yuList.Count > 0)

                {  //反向取余数
                    for (Int32 i = yuList.Count - 1; i >= 0; i--)

                    {

                         strOut.Append(String.Format("{0}", yuList[i]));

                    }

                }

                return strOut.ToString();

            }

            catch (Exception ex)

            {

                return String.Format("出错了:{0}", ex.Message);

            }

        }

对于大于10的进制要另作处理了,例如16进制,就要用a、b、c等字符来进行数字的代替!

 

2、将任意进制转换为十进制,按权展开

设任意进制n数位x,按权展开的模式是:

       (100111)2  =1X25+0X24+0X23+1X22+1X21+1X20=(39)10

       (365)8=3X82+6X81+5X80=(245)10

示例Code:

        /// <summary>

        /// 接受2个参数,第一个是数值,第二个是原进制

        /// 在这里我们只考虑10进制以下的,对10进制以上的也同样适用,只是这里就不能用int了,我这里只是为了方便处理,原理是一样的

        /// </summary>
        protected String ZhuanHuan(Int32 val1, Int32 val2)

        {

            if (val1 == 0)

                return "0";

            if (val2 >= 10 || val2 < 2)

                return "只处理10进制以下的数";

            char[] valChar = val1.ToString().ToCharArray();

            //对数组进行反序
            if (valChar.Length > 0)

            {

                Int32 begin = 0;

                Int32 end = valChar.Length - 1;

                while (end > begin)

                {

                    char temp = valChar[begin];

                    valChar[begin] = valChar[end];

                    valChar[end] = temp;

                    begin++;

                    end--;

                }

            }

            StringBuilder strOut = new StringBuilder();

            strOut.Append("转换为10进制的结果为:");

            double valueOut = 0.0;

            for (Int32 i = 0; i < valChar.Length; i++)

            {

                valueOut += Int32.Parse(valChar[i].ToString()) * (Math.Pow(val2, i));                

            }

            strOut.Append(String.Format("{0}", valueOut));

            return strOut.ToString();

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: