为什么会写这篇文章呢?起初是在跟小书童讨论IP地址和子网掩码的关联问题,我是靠长期锻炼的肌肉记忆去换算十进制和二进制的匹配关系,当小书童问我是怎么运算的,大脑一下卡壳了,而他总结了一套相对于网工来说很实用的凑数方法,可以很容易的学习掌握IP地址和子网掩码的对应关系。
基于这件事,我进行了一次深度思考,二进制和十进制的换算方法的根本原理是什么,为什么会是通过这样的方法来换算。
另外本文主要讲述关于二进制的思考,不过底层原理想通,八进制和十六进制与十进制的换算问题,原理相似,只要搞懂二进制和十进制之间的关系,八进制和十六进制、包括其他进制也都可以很轻松的理解了。
以1101(二进制)为例,换算成十进制计算方式如下:
![]()
为什么是2的3次幂,而不是其他,在探讨这个问题以前,我们先来看一下下面这个问题。
为什么人类社会选择了十进制
关于这个问题,我自己思考了很久,我们研究二进制和十进制的换算原理,这个问题就绕不过去,因为如果我们从一开始就使用二进制,而不是十进制,那就不涉及到现在的换算问题。
我自己在初步想通这个问题以后,也去查了网上的一些说法,有跟我想法类似的,也有很多高深的,为了让大家更容易的理解,在这里我采用了自己的这个对于普通人来说更容易接受的解释。
一共有2阶思考:
-
前提是以现有的十进制,阿拉伯数字0-9去理解。
因为我数学能力一般,很难去跳脱出现有的数学基础概念去思考这个问题,所以只能是借用已有的基础概念去分析这个问题。
二进制的意思是逢二进一,八进制就是逢八进一,十进制就是逢十进一,十六进制就是逢十六进一。
数字是用来表示物体的数量,按照已有的阿拉伯数字,“10”在上面每种进制中对应的实际物体数量如下:
|
10 |
实际数量 |
|
二进制 |
2 |
|
八进制 |
8 |
|
十进制 |
10 |
|
十六进制 |
16 |
从上表中我们可以看到,只有十进制的10跟实际数量是一致的,这样我们的大脑不需要经过额外的运算,可以通过看到的数字很直观的获取到实际的数据。
-
从我们的手指数量去理解。
一般情况下,我们每只手有5个手指,两只手刚好是10,一开始没有数学概念的时候,通过手指去计数,每够10个以后做一个标记,我想这大概念就是十进制的由来吧。
另外通过算盘我们也能看到十进制的影子,而且还是二进制与五进制结合的十进制,跟2只手、5个手指相对应,当我把这两个东西联系起来的时候,瞬间觉得好神奇。

二进制转换十进制
从上面我们可以初步认识到,十进制的数字跟实际数量是相同的,所以二进制转换十进制的本质就是算出二进制表示的具体数量,现在我们来看一开始提出的那个问题,为什么1101(二进制)换算十进制第一位会是2的3次幂。

二进制就是逢二进一,我们可以理解成一个合体升级的游戏,每2个同级的物体就可以合并升级成1个更高级别的物体,上图中的d我们看为1级,2个d合成1个c,2个c又合成一个b,最后2个b合成1个a,a在这里代表4级。
从d到a(从1级到4级),一共经历了3次合成(升级),所以1个a是由2*2*2(2的3次幂)个d组成的,而d代表计数的最小单元,所以1个a代表的实际数量就是8(个d)。
对于1101(二进制),从右往左分别是1级(1个d)、2级(0个c)、3级(1个b)、4级(1个a),现在要把二进制换算成十进制,也就是算出实际的数量,而d又是计数的最小单元,所以实际上就是算出一共有多少个d。

所有我们可以算出1101(二进制)一共代表了13个d。
8+4+0+1 = 13个d
对于八进制、十进制、十六进制来说也是同样的原理,以1101为例,我们看一下每种进制的换算结果。

十进制转换二进制
在网上找了一个十进制转换二进制的图片,用十进制的数去除2,一直到最后为1,然后从下到上列出余数,就是对应的二进制,那么为什么是这样的换算逻辑呢?

下面我们还是用1101(二进制)来举例,对应的十进制是13,也就是代表实际数量是有13个d,还是按照下面张图,我们去把这13个d去合成升级。

第1次合成(升级):13÷2=6,余1。代表合成了6个c,剩下1个d。
第2次合成(升级):6÷2=3。代表合成了3个b。
第3次合成(升级):3÷2=1,余1。代表合成了1个a,剩下1个b。
最后的结果是,13个d,我们一共合成了1个a,1个b,0个c,1个d。所以用二进制去表示13就是1101。
2287

被折叠的 条评论
为什么被折叠?



