关于进制转换的问题
2017-07-27 16:28
281 查看
在c#和c++的学习过程中,最常用的一些个案例就是进制之间的转换。进制转换既是计算机学习中基础,对有些初学者而言也比较困难,但是在网上搜索时却没有发现比较好的代码。所以就整理了一点关于进制转换的代码和思路以供参考。
首先,进制转换主要是两个大类:
1.10进制转换到其他进制。
2.其他进制转换成10进制。
在我们的常用进制中,主要是2进制 8进制 和16进制。但是在进制转换的公式中其实是可以推广到任意进制的,只是有些进制在最终结果的处理上稍有不同下面将以2进制作为例子说明。
2进制转换为10进制。
在任意进制转换为10进制的过程中,主要是相位的累乘和相加。
比如1101转换成10进制。
2*2*2*1+2*2*1+2*0+1(2的0次方)*1=13
如果是8进制。
27(8进制)
8*2+7*1(8的0次方)=23
其他任意进制都可以这样进行10进制的转换
我们可以得到一个公式,假如有一个数abc,这个数的进制为x。
a*x*x+b*x+c*1(任何数的0次方都是1,以下不在解释)=y(这个数对应的10进制数)
以下是c#的代码:
public void htoten(string ba,int q)//其他进制在这里输入的是字符串格式
{
int t = 0;//t用来储存我们将要累加的数
int w = 1;//用来储存我们相位不同的时候对应的次方数。
for (int i = ba.Length - 1; i >= 0; i--)//用一个for循环来控制,同时将一串数字分离
{
int n = ba[i] - '0';//将分离后的数字转换成10进制方便下面的计算
if (n >= 17)
{ n = n - 7;}//这个是16进制的转换(只考虑了16进制大写情况,小写情况类似处理)
t = t + n * w;//和上面的例子相同,不同的相位,乘上不同的数并累加
w = w * q;//相位的改变,q是当前这个数的进制
}
r = t;
Console.WriteLine("这个数的10进制为:{0}", r);//输出
}
在c++的代码中,和这个高度相似,就不再赘述了。
接下来是10进制转换到任意进制,方法都是一样的,只是进制的不同所要求余的数不同而已。
以10进制转换2进制为例
15(转到2进制)
15/2=7余1
7/2=3余1
3/2=1余1
1/2=0余1
从下面记上去 1111 任意进制都市报一样的求余后从后面开始计数
143(转到8进制)
147/8=18余3
18/8=2余2
2/8=0余2
所以这个数的8进制是223
如果这个数比较小57
直接可以得出71 其余进制相似。
好了 直接上c#代码
public string tentob(int r, int b)//r是当前的10进制数,b是要转换的进制
{
if (b != 16)//当不转换到16进制
{
string j = "";//用一个字符变量来储存
while (r > 0)//当日部位0的时候循环进行下面的运算
{
int c = r % b;//对这个数进行求余运算
j = c.ToString() + j;//将得出的结果倒序记录在j上
r = r / b;//r除以将要转换的进制
}
return j;//运算结束 返回j这个字符串
}
else//如果要转换到16进制
{
string k = "", c = "";
while (r > 0)//依旧用函数控制
{
int x = r % b;//得到求余的值如果小于16 则在下面的switch中得到对应的字母
switch (x)
{
case 10: c = "A"; break;
case 11: c = "B"; break;
case 12: c = "C"; break;
case 13: c = "D"; break;
case 14: c = "E"; break;
case 15: c = "F"; break;
default: c = x.ToString(); break;//找到对应的大写字母后用c来记录
}
k = c + k;//k是记录无论是否有大写字母还是无
r = r / b;//除以进制
}
return k;//返回这个进制的字符串
}
}
呃,c++的代码类似啊,哈哈。 c++不能调用c#里面的length函数和ToString函数,可以将数字转换成字符也可以的 而且在c++中转16进制的时候用字符可以直接用ascll码得到大写字母, 比这个还要简单。
首先,进制转换主要是两个大类:
1.10进制转换到其他进制。
2.其他进制转换成10进制。
在我们的常用进制中,主要是2进制 8进制 和16进制。但是在进制转换的公式中其实是可以推广到任意进制的,只是有些进制在最终结果的处理上稍有不同下面将以2进制作为例子说明。
2进制转换为10进制。
在任意进制转换为10进制的过程中,主要是相位的累乘和相加。
比如1101转换成10进制。
2*2*2*1+2*2*1+2*0+1(2的0次方)*1=13
如果是8进制。
27(8进制)
8*2+7*1(8的0次方)=23
其他任意进制都可以这样进行10进制的转换
我们可以得到一个公式,假如有一个数abc,这个数的进制为x。
a*x*x+b*x+c*1(任何数的0次方都是1,以下不在解释)=y(这个数对应的10进制数)
以下是c#的代码:
public void htoten(string ba,int q)//其他进制在这里输入的是字符串格式
{
int t = 0;//t用来储存我们将要累加的数
int w = 1;//用来储存我们相位不同的时候对应的次方数。
for (int i = ba.Length - 1; i >= 0; i--)//用一个for循环来控制,同时将一串数字分离
{
int n = ba[i] - '0';//将分离后的数字转换成10进制方便下面的计算
if (n >= 17)
{ n = n - 7;}//这个是16进制的转换(只考虑了16进制大写情况,小写情况类似处理)
t = t + n * w;//和上面的例子相同,不同的相位,乘上不同的数并累加
w = w * q;//相位的改变,q是当前这个数的进制
}
r = t;
Console.WriteLine("这个数的10进制为:{0}", r);//输出
}
在c++的代码中,和这个高度相似,就不再赘述了。
接下来是10进制转换到任意进制,方法都是一样的,只是进制的不同所要求余的数不同而已。
以10进制转换2进制为例
15(转到2进制)
15/2=7余1
7/2=3余1
3/2=1余1
1/2=0余1
从下面记上去 1111 任意进制都市报一样的求余后从后面开始计数
143(转到8进制)
147/8=18余3
18/8=2余2
2/8=0余2
所以这个数的8进制是223
如果这个数比较小57
直接可以得出71 其余进制相似。
好了 直接上c#代码
public string tentob(int r, int b)//r是当前的10进制数,b是要转换的进制
{
if (b != 16)//当不转换到16进制
{
string j = "";//用一个字符变量来储存
while (r > 0)//当日部位0的时候循环进行下面的运算
{
int c = r % b;//对这个数进行求余运算
j = c.ToString() + j;//将得出的结果倒序记录在j上
r = r / b;//r除以将要转换的进制
}
return j;//运算结束 返回j这个字符串
}
else//如果要转换到16进制
{
string k = "", c = "";
while (r > 0)//依旧用函数控制
{
int x = r % b;//得到求余的值如果小于16 则在下面的switch中得到对应的字母
switch (x)
{
case 10: c = "A"; break;
case 11: c = "B"; break;
case 12: c = "C"; break;
case 13: c = "D"; break;
case 14: c = "E"; break;
case 15: c = "F"; break;
default: c = x.ToString(); break;//找到对应的大写字母后用c来记录
}
k = c + k;//k是记录无论是否有大写字母还是无
r = r / b;//除以进制
}
return k;//返回这个进制的字符串
}
}
呃,c++的代码类似啊,哈哈。 c++不能调用c#里面的length函数和ToString函数,可以将数字转换成字符也可以的 而且在c++中转16进制的时候用字符可以直接用ascll码得到大写字母, 比这个还要简单。
相关文章推荐
- 关于2进制,8进制,16进制间的转换问题
- 关于python进制与字符转换的问题研究
- 关于各种进制的转换与数据在编辑框中显示的若干问题
- 关于进制转换计算问题
- 关于一个时间的转换问题。由一个RFC3339时间格式的字符串转为本地时间
- 关于统计整数转换为二进制后含多少1的问题
- 关于CString剖析,“strcmp”: 不能将参数1从“CString”转换为“const char *”问题
- 关于UTL会自动转码的问题 %自动转换为%25
- 关于java的进制问题
- 关于ArrayList类型转换的问题_java可以为啥c#不行
- 关于84坐标系与54坐标系转换问题
- 关于ListView中继承BaseAdapter重写getview的显示重复数据或报转换错误的问题
- 经得起雷劈:关于double和int/long相互转换失去精度计算错误的问题
- 关于java类型转换的问题
- 关于CString剖析,“strcmp”: 不能将参数1从“CString”转换为“const char *”问题
- JAVA关于byte数组与String转换的问题
- 关于C语言中进制问题以及简单的浅谈进制转化问题。
- 关于SQL Server中将数值类型转换为字符串的问题
- 关于EditText中的getText()方法的返回值类型以及string的转换问题
- 关于html文件转换成jsp文件之后的样式改变的问题