您的位置:首页 > 其它

不同进制数的转换及应用

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

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

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