不同进制数的转换及应用
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();
}
不同进制转换的基本算法是:
(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();
}
相关文章推荐
- 不同进制数的转换及应用
- 不同进制数的转换及应用
- 第12周 数据结构和算法 线性表-5 栈-栈完成进制转换及应用
- 字符串拷贝与进制转换的简单应用
- 数据结构栈应用之进制转换
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)
- 使用 STL stringstream 做各种不同进制的字符串到整数的转换
- linux shell 不同进制之间转换
- 数据结构的应用——使用栈实现十进制到其他(2、8、16)进制的转换
- 数据结构的应用——使用栈实现十进制到其他(2、8、16)进制的转换
- Python中的不同进制的语法和转换
- 二进制字符串和十六进制字符串转换为对应ASCII码和字符中不同进制间的转换
- c# 不同进制之间的转换
- 结合stack数据结构,实现不同进制转换的算法
- 堆栈的简单实现之二:进制转换方面的简单应用(C语言实现)
- 不同进制之间的转换的各种方法
- 栈的应用之进制转换code_legend
- 语言小知识-Java- 不同进制之间的转换
- 不同进制间的相互转换的理解
- 栈的应用:进制转换和简易计算器的实现