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|评论


本文标签: 进制 方法 数字 转换 计算