欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

简单解析数字转换的基础机制

最编程 2024-07-20 18:25:03
...

浅析进制的转换原理

进制也就是进位制,做加法运算时满 x 进 1,做减法时借 1 当 x,这就是 x 进制,包含 x 个数字即区间 [0, x-1],基数为 x;十进制有 0~9 共10个数字,基数为10,在加减法运算中,满10进1,借1当10。

1.任意进制向十进制转换(理解按权相加的方法)

1)十进制转换为十进制(转换为本身?多此一举?先想一想这个问题,或许有必要。)

x进制包含区间为 [0, x-1] 内的整数,在此暂且将这些整数成为 x 进制的“基本数”;

十进制包含的基本数为:0,1,2,3,4,5,6,7,8,9 共10个数;

例:将十进制数 985.211 转换为十进制

可以将这个数分解:

985.211 =

900.00 + 80.00 + 5.00 + 0.200 + 0.010 + 0.001 =

9 * 100 + 8 * 10 + 5 * 1 + 2 / 10 + 1 / 100 + 1 / 1000 =>

9 * (10^2) + 8 * (10^1) + 5 * (10^0) + 2 * (10^(-1)) + 1 * (10^(-2)) + 1 * (10^(-3)) =

(看到“位权”了吗?就是那个“10”的幂!)

900 + 80 + 5 + 0.2 + 0.01 + 0.001 = 985.211

我们看到了十进制转换到十进制的过程,最重要的是分解到出现“位权”的过程,

我们观察到原来待转换的进制的每一位数(这个进制的基本数)作为了转换时每一项的系数,也就是其后的10的幂次的倍数;

由于x进制满x进1,并在其后补0,即变成了10,所以x进制的10就对应十进制的数x:十进制的10对应十进制的10,二进制的10对应十进制的2,八进制的10对应十进制的8,十六进制的10对应十进制的16...

x进制的数可以像上面的例子一样分解成每一位数(该进制的基本数)乘以相应的该进制下的10的幂次,由于x进制的10就对应十进制的数x,所以再将x进制的10替换为x后,再计算结果就是对应的十进制数了。

例:

2)二进制转换为十进制:

将二进制 (1011011) 转换为十进制

1011.011 =

1000 + 10 + 1 + 0.01 + 0.001 =

1 * (10^3) + 1 * (10^1) + 1 * (10^0) + 1 * (10^-2) + 1 * (10^-3) =>

(开始转换为十进制,将二进制的10替换为十进制的2)1 * (2^3) + 1 *(2^1) + 1 * (2^0) + 1 * (2^-2) + 1 * (2^-3) =

8 + 2 + 1 + 0.25 + 0.125 = 11.375(转换为十进制的结果,转换完毕)

3)八进制转换为十进制:

将八进制(137.2) 转换为十进制

137.2 =

100 + 30 + 7 + 0.2 =

1 * (10^2) + 3 * (10^1) + 7 * (10^0) + 2 * (10^-1) =>

(开始转换为十进制,将八进制的10替换为十进制的8)1 * (8^2) + 3 * (8^1) + 7 *(8^0) + 2 * (8^-1) =

64 + 24 + 7 + 0.25 = 95.25(转换为十进制的结果,转换完毕)

4)十六进制转换为十进制:

将十六进制 (9FABC) 转换为十进制

9FABC =

90000 + F000 + A00 + B0 + C =

9 * (10^4) + F * (10^3) + A * (10^2) + B * (10^1) + C * (10^0) =>

(开始转换为十进制,将十六进制的10替换为十进制的16)9 * (16^4) + 15 * (16^3) + 10 * (16^2) + 11 * (16^1) + 12 * (16^0) =

589824 + 61440 + 2560 + 176 + 12 = 654012

5)将九进制数(2022)转换为十进制

2022 =

2000 + 20 + 2 =

2 * (10^3) + 2 * (10^1) + 2 * (10^0) =>

(开始转换为十进制,将九进制的10替换为十进制的9)2 * (9^3) + 2 * (9^1) + 2 * (2^0) =

1458 + 18 + 2 = 1478

其他任意进制转换为十进制可同上方法,不一一举例。

至此,通过上述分析,我想我已经简单浅显地解释了任意进制转换为十进制的具体过程和基本原理,以此回答了为什么要用按权相加的方法,你觉得我写得对不对呢?

2.十进制向任意进制转换

整数部分:

我们已经知道了什么是进位制,即知道了进位制的变化规则,我们把十进制和其他进制放在一起观察一下:

其中"t"代表十进制数


进制对照表

我们可以观察到

当十进制数还没有满x进制时,十进制数就是x进制数,当十进制数满x进制时,我们需要把十进制中的x取出来作为x进制的10来给x进制进1位,这也就是前面说的x进制的10对应十进制的x,两者是相互对应的,这是由进位制的规则(满x进1)得出的。

所以十进制转换为x进制的操作是:

取出十进制中的x作为x进制的10,加上取出后剩余的未满x进制的数。如果取出的“x的个数”超过x,再将这个取出的个数(十进制)也转换为x进制即可。

例:

将十进制整数(11) 转换为二进制

11中取出2的个数:11 / 2 = 5,

余数:11 % 2 = 1

则:11 => 转换为二进制:5 个 10(二进制) + 1

5中取出2的个数:5 / 2 = 2,

余数:5 % 2 = 1

则:5 => 转换为二进制:2 个 10(二进制) + 1

2 => 转换为二进制:1个10(二进制)

综上就是在二进制下:(10个10+1)个10+1

所以:11 => 转换为二进制:(10 * 10 + 1) * 10 + 1 = 1011

其他进制向十进制的转换方式同上

于是我们可以理解一般的转换方法:

对十进制的部分取出x进制,余数就是x进制数,把余数从低位到高位排列,最终得到x进制数。

我们可以知道,一个十进制数除以x进制得到的余数,一定是x进制的基本数,即得到的余数一定在[0, x-1]范围内,

又知道:一个十进制数 = 这个十进制数最多可以取出的x的个数 * x + 这个十进制数取完所有x后剩余的数

即:

(十进制数) = (十进制数 / x) * x + (十进制数 % x)

这里的x也可以代表x进制

十进制转换成x进制时,把x替换成x进制的10,(十进制 % x) 的部分就是x进制数,(十进制 / x) 的部分还是十进制数,继续向x进制转换,直到所有十进制数部分全部转换为x进制数为止。

小数部分:

十进制的小数部分对应x进制的一个小数,这个x进制的小数一定是x进制的某个数n除以x进制的10得到的(假设十进制只有一位小数)

那么转换过程就是十进制小数转换为x进制的 n / 10,又知道x进制的10对应十进制的x,那么十进制小数乘以十进制的x就可以得到那个x进制数 n,n一定小于x,所以n是x进制下的数。

可以通过x进制小数转换为十进制小数的过程来逆向思考:

二进制小数转换为十进制小数:0.1 = 1 / 10 => 1 / 2 = 0.5

八进制小数转换为十进制小数:0.2 = 2 / 10 => 2 / 8 = 0.25

这样将十进制的小数乘以十进制的x得到的整数部分对应的是x进制小数的第一位数,把每次得到的数的小数部分继续转换,依次把得到的x进制数从高位到低位排在小数点的后面即可。

至此,我应该已经简单浅显地解释了任意进制转换为十进制的具体过程和基本原理,明白原理之后,我们就可以更轻松地理解和运用转换方法了。

万变不离其宗,我们通过进位制的规则:x进制满x进1,简单地分析并理解了十进制与其他进制间的转换方法,抓住本质,在日后遇到从未见过的这类问题也可以自行分析解决了。

内容浅显,多有误区,欢迎指正!

2022-04-27修改:错别字和逻辑错误

推荐阅读