首页 简历|笔试面试

进制转换的原理是什么?(完结)

  • 25年9月4日 发布
  • 41.19KB 共4页
进制转换的原理是什么?(完结)进制转换的原理是什么?(完结)进制转换的原理是什么?(完结)进制转换的原理是什么?(完结)

进制转换的原理是什么?(完结)

老实说,在我一开始学编程的时候,根本没有去关注进制之间的转换问题,直到后来阅读

了一本《程序是怎样跑起来的》,里面对进制转换,尤其是十进制和二进制之间的转换,

感觉十分有趣。

比如说二进制左移一位,会发生什么?

右移一位,又会发生什么?

明白了之后,当我再去阅读 JDK 的一些涉及到位移/取余的代码的时候,就会恍然大悟,

哦,原来如此啊。那今天这篇内容也希望给球友们一些帮助和参考。

二进制换十进制 是比 十进制换二进制更基础的,我们从这里讲起。

进制这事儿,说到底就是位值原理,即:

同一个数字,放在不同的数位上,代表不同大小的数。

例如:十进制中,百位上的 1 表示 100,十位上的 1 表示 10.

十进制之中,每个数都可以被拆开:

123=1×100+2×10+3×1

9876=9×1000+8×100+7×10+6×1

这个事情先搞清爽,然后我们就可以为拓展进制做准备了:

试回答这个问题:为啥相应的数位是 1000、100、10、1?为啥不是 4、3、2、1?

答:满十进一,再满十再进一,因此要想进到第三位,得有 10×10;第 4 位得有

10×10×10

这样我们就知道了,对 10 进制,从低位到高位,依次要乘上:

100(10 的 0 次方,后同),101,102,103……

下面我们开始换进制玩儿:

把_十_ 进制换成 二 进制

也就是把 10 换成 2

那么我们得到:

对 2 进制,从低位到高位,依次要乘以 20,21,22,23……

也就是 1、2、4、8、……

v2-6b1d6c779d2c6ed6e84013c432f72d69_720w.jpg

因此原来十进制咱们叫 十位、百位、千位……

现在二进制其实是 二位、四位、八位……

这样我们就能做十进制换二进制了:

比如:二进制数 1011=1×23+0×22+1×21+1×20=1×8+0×4+1×2+1×1=8+2+1=11

(由于二进制中非零的数只有 1,所以其实等同于:

个位有数就加 1,二位有数就加 2,四位有数就加 4……)

接下来我们进行十进制往二进制的转换:

比较小的数,直接通过拆分就可以转换回去

比如 13,我们数一数,1、2、4、8、16……,唔,不能包含 16 了,那就只能包含 8。

13-8=5,5 当中有 4,5-4=1

好啦,我们知道 13=8+4+1

接着把她对应回相应位置去,8 是从低往高数的第 4 位,4 是从低往高数的第 3 位,1 是

从低往高数的第 1 位

于是 13=二进制数 1101

v2-e11e824ca9843598bc48debd325e832b_720w.jpg

然后就多练习这个,反复练,让自己熟悉这个感觉:

17=16+1=二进制 10001

19=16+2+1=二进制 10011

30=16+8+4+2=二进制 11110

……

比较熟悉之后就可以看看高级的短除法化二进制了(不要偷懒哦!先去把前面的练

熟!):

粗鄙地来做的话,现在你按照书上说的短除法来试试,会发现它和你凑数得到的结果刚好

是一样的,好神奇~

以后就按这个做吧!

想要知道其中的道理的话:

(1)一个二进制数末尾是 1,意味着一定是……+1,前面的每个数都是 2 的倍数,只有最

后的+1 不是

所以一个二进制数末尾是 1,意味着它对应的十进制数除以 2 一定是余 1 的。

所以第一次除以 2 之后的余数,就是转换结果中的最后一位。

(2)如果一个二进制数从低往高第 2 位是 1,我们希望把它转换为(1)的情况,那么我

们把这个二进制数的末尾抹掉。

抹掉尾巴的二进制数,和原来的二进制数相比,每个数都往低位错了 1 位,相当于除以 2.

末尾的尾巴丢掉了,相当于我们把余数丢掉了。

而这个除以 2 的步骤,刚好是(1)当中判断末尾是不是 1 的步骤,所以我们刚好可以继

续做下去。

对这个抹掉了尾巴的二进制数(十进制来说就是原数除以二之后的商),我们继续(1)

的做法,把它除以 2,看余数。

……

如此继续下去,就可以得到短除法的结论了。

比如说十进制整体右移一位(相当于小数点左移一位),是除以十。十进制除以十,类比

过来,二进制除以二

开通会员 本次下载免费

所有资料全部免费下载! 推荐用户付费下载获取返佣积分! 积分可以兑换商品!
一键复制 下载文档 联系客服