不同进制数的转换及应用
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();
}
不同进制转换的基本算法是:
(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();
}
相关文章推荐
- 不同进制数的转换及应用
- 不同进制数的转换及应用
- c# 不同进制之间的转换
- 关于不同进制数之间转换的数学推导【Written By KillerLegend】
- 栈的应用 10进制的转换
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)
- python中stack在实际中的简单应用之进制转换
- C# 不同进制数字转换整理
- 不同进制之间的转换
- Stack应用之进制转换与迷宫问题
- Python中的不同进制的语法和转换
- 不同进制之间的转换
- 使用Python内置的模块与函数进行不同进制的数的转换
- ASCII码表以及不同进制间的O(1)转换
- 栈的应用之进制转换
- 栈的应用之进制转换code_legend
- 不同进制大数之间的相互转换
- 使用Python内置的模块与函数进行不同进制的数的转换
- 字符串拷贝与进制转换的简单应用
- JAVA基础之进制转换,查表法的应用