【Java Saves!】Session 5:计算机器之三--二指禅

时间:2021-11-21 07:24:15

人有十指。人类掰着手指头,发明出了0、1、2…9这十个数字。后来手指头不够用了,便发明出数位(个、十、百、千…)和满十进一的规则,称为十进制。

而计算机靠两个手指头工作。在计算机内部,只有0和1两个数字;对于多位数,从低位向高位满二进一。这叫二指禅--哦,不--叫二进制。

用Windows自带的计算器程序看看二进制数长啥样。打开计算器,切换到“程序员”模式,随意输入一个数,它上面会同步显示出这个数的二进制 表示形式 ,如下图。如果您使用不同的Windows版本,计算器界面可能看起来不一样,但应该会有类似的模式和二进制显示功能。

【Java Saves!】Session 5:计算机器之三--二指禅

我输入的是银行卡密码和博客园登录密码,十进制数123456。注意看到中间一排字:BIN 0001 1110… 好长一串,这就是123456这个(十进制)数的二进制 表示形式 。为什么我要强调“表示形式”这四个字呢?因为它俩其实是一样多,只是写法--也就是表示形式--不同而已。真的是一样多吗?下面我演示给你看。

首先,我们习用的十进制数,个位每个数是100 = 1,十位每个数是101 = 10,百位每个数是102 = 100,千位每个数是103 = 1000,…依此类推。所以

123456

= 1 × 105 + 2 × 104 + 3 × 103 + 4 × 102 + 5 × 101 + 6 × 100

= 1 × 100000 + 2 × 10000 + 3 × 1000 + 4 × 100 + 5 × 10 + 6 × 1

二进制是同样的计算过程,只是每个数位所乘的指数的底数不是10,而是2。例如,个位每个数是0 = 1,十位每个数是1 = 2,百位每个数是2 = 4,千位每个数是3 = 8,…依此类推。所以

11110001001000000二进制

= 1 × 216 + 1 × 215 + 1 × 214 + 1 × 213 + 0 × 212 + 0 × 211 + 0 × 210 + 1 × 29 + 0 × 28 + 0 × 27 + 1 × 26 + 0 × …

= 1 × 216 + 1 × 215 + 1 × 214 + 1 × 213 + 1 × 29 + 1 × 26

= 1 × 65536 + 1 × 32768 + 1 × 16384 + 1 × 8192 + 1 × 512 + 1 × 64

= 123456

为什么放着现成十个数字不用,而要用用0和1两个数字表示的冗长不便的二进制数呢?不是因为计算机长了2个手指头…是因为计算机/CPU内部是由无数个微小的电子开关构成的,开关有打开和关闭两种状态,如果说用一个开关表示 一位数 的话,那么每位数就只能有0和1两种数字了。

嗯,正经事就说得差不多了,下面讲点八卦--

【Java Saves!】Session 5:计算机器之三--二指禅

八卦是这样讲的:易有太极,是生两仪,两仪生四象,四象生八卦。看出来没?这就是6、7千年前我们的老祖先创造的二进制系统,有 【Java Saves!】Session 5:计算机器之三--二指禅

【Java Saves!】Session 5:计算机器之三--二指禅 两个数字。两仪是一位数,四象是二位数,八卦是三位数。再往后推还有6位数的六十四卦,例如 【Java Saves!】Session 5:计算机器之三--二指禅【Java Saves!】Session 5:计算机器之三--二指禅

当然,八卦是属于中国的,但归根结底是属于韩国(全称 韩民国)的--

【Java Saves!】Session 5:计算机器之三--二指禅

而韩国,则是属于百事的--

【Java Saves!】Session 5:计算机器之三--二指禅