admin 管理员组文章数量: 887031
2024年1月25日发(作者:c语言float用法举例)
所谓进制只是一个权重
在A进制下,数字实际值是各位数字的"权值*权重"的累加值
而"权重"为A的n次方,n代表位数
用公式来表示就是:
abcd = a * A^3 + b * A^2 + c * A^1 + d * A^0
举个直观的例子来说
在7进制下,数字 1234 的大小应该是
1 * 7^3 + 2 * 7^2 + 3 * 7^1 + 4 * 7^0
=1*343 + 2*49 + 3*7 + 4*1
=466
当然,得出来的值是十进制下的466
因为其中我们用的运算符号+ *和乘方都是十进制下的运算符号
如果说要7进制转8进制,同样是按照上面的公式来计算,不过所有的运算符号都要换成8进制下的运算符号
同样是以刚才的例子
把 7 进制的 1234 转换为 8 进制
我们在符号上加上括号(*)(+)(^)来表示8进制的运算符号
注意,下面的计算都是基于8进制的,所以除了第一行之外其它数字都是8进制
1234(7进制)
= 1 (*) 7(^)3 (+) 2 (*) 7(^)2 (+) 3 (*) 7(^)1 (+) 4 (*) 7(^)0
= 1 (*) 527 + 2 (*) 61 + 3 (*) 7 + 4 (*) 1
= 527 + 61 + 25 + 4
= 722
事实上这么计算非常不方便,因为我们习惯的四则运算,乘方,我们背的九九运算表都是基于十进制的,要勉强用其它进制进行计算的话十分不爽
所以通常的 A 进制转 B 进制的做法是
先将 A 进制转换为十进制
再将十进制的数字转化为B进制
任意进制转10进制的方法刚才说过了
现在我们来看一下十进制转任意进制的方法
十进制转任意进制的方法一般有两种
1.试减法
2.短除法
总的来说,方法1适合笔算,方法2适合计算机算
下面分别说
1.试减法
通过估算反复减去不大于目标数字的权重的n次方来得到每一位的数字
说起来十分拗口,做起来其实不难
比如将十进制的 1234 转为 5 进制
首先寻找不大于1234的5的整数次方
5^4 = 625 < 1234
5^5 = 3125 > 1234
所以 625 符合条件
625 * 2 = 1250 >1234
625 * 1 = 625 <1234
所以第5位上的数字为1
1234(十进制) = 1?
用1234 - 1 * 5^4 = 609作为目标数,再重复刚才的操作
因为刚才得出了最高位是第5位,所以现在接着往下算就可以了
5^3 = 125
125 * 4 = 500 <609
第4位上的数字为4
1234(十进制) = 14?
609 - 4 * 5^3 = 109
5^2 = 25
25 * 4 = 100 <109
第三位上的数字为4
1234(十进制) = 144?
109 - 4 * 5^2 = 9
5^1 = 5
5 * 1 = 5 <9
5 * 2 = 10 >9
第二位上的数字为1
1234(十进制) = 1441?
9 - 1 * 5^1 = 4
最低位上的数字为4
1234(十进制) = 14414
可以看出这个方法需要多次估计与试算,所以不适合计算机算
2.短除法
通过反复短除目标数求余来得到每一位上的数字
比如 1234 转 5 进制
1234 / 5 = 246余 4
246 / 5 = 49余 1
49 / 5 = 9余 4
9 / 5 = 1余 4
1 / 5 = 0余 1
可以看出,所有的余数就构成了转化的结果 14414
最低位在最上
这样的方法计算量比较大,适合计算机算
最后,对于有乘方关系的两个进制转换有简洁的算法
比如3进制和9进制互转
因为 9 是3的2次方,所以 3 进制数每两位就对应 9 进制数的1位
9进制
比如9进制1234转3进制就有如下对应关系
0----00
1----01
2----02
3----10
4----11
5----12
6----20
7----21
8----22
所以 9 进制 3781 转化为 3 进制就可以简单地查表计算为
3 7 8 1 = 10 21 22 01 =
归纳一下:
A进制转10进制:
k(n) * 10^(n-1) + k(n-1) * 10^(n-2) + ... + k(2) * 10^1 + k(1) * 10 ^0
其中n代表数字所在的位数,k(n)代表第n位上的数字值
10进制转A进制:试减法或者短除法
53|评论(6)
求助知友
CyraSafia | 当前分类:10 级 排名:505
擅长Windows:18 级 排名:2320
按默认排序|按时间排序
其他回答 共10条
2008-12-16 15:52zxkha| 当前分类:5 级 排名:4655
很难讲清楚...
2进制 8进制 10进制 16进制是最经常用的,给你举例子说明吧
每个进制转化成十进制的:
每个位的数字×n的(n-1)相加,n是位数..
比如
101110(2)=1×2^(6-1)+0×2^(5-1)+1×2^(4-1)+1×2^(3-1)+1×2^(2-1)+0×2^(1-1)=45(10)
57624(8)=5×8^(5-1)+7×8^(4-1)+6×8^(3-1)+2×8^(2-1)+3×8^(1-1)=24468(10)
其他进制也是一样。。
至于十进制换成其他进制,有可以用除法来实现,在这边没办法打出来...
建议你找本计算机基础只是看看..
0|评论
2008-12-16 16:05| 当前分类:1 级
R 进制转换成十进制的方法
具体的方法是先将其并列形式的数写成其多项式表示形式,然后,经计算后就可得到其十进制的结果。这种方法披称为按权展开法。对于一个任意的R进制数N都可以写成如下形式:
N = dn-1 dn-2…d1 d0d-1d-2…d-m =
dn-1*Rn-1+…+d1*R1+d0*R0+d-1*R-1+…+d-m*R-m
其中,R 为进位基数,Ri 是对应位的权值,di 为系数项,特此式求和计算之后,即可以完成 R 进制数对十进制数的转换。
二进制、十进制和十六进制及其相互转换的公式
数制转换的本质和方法
陈清华 郑涛 陈家伟
北京师范大学管理学院系统科学系,北京100875
0|评论
2008-12-16 21:57大事糊涂| 当前分类:1 级
记住:
任何进制都是“逢n进一”;
任意进制数都可以表示为“倍n次方之和”
a进制数 转换为 b进制数,有一个最佳中介是十进制数;
任意进制数之间的通用转换公式还是努力自己去找为好----可以学到很多意外的技术
0|评论
版权声明:本文标题:进制转换公式 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1706155121h502180.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论