不同进制数的转换及应用

 在计算机领域中,有时需要将十进制数转换为二进制、八进制、十六进制的数;有时又需要逆向转换将二进制、八进制和十六进制的数转换为十进制或它们相互之间进行转换.

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

         (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();
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值