神奇的二进制与十进制
"1与0,一切数字的神奇渊源。这是造物的秘密美妙的典范,因为,一切无非都来自上帝。——数学家莱布尼兹手稿。"
《易经》说,一阴一阳之谓道。《圣经》中,上帝从无到有创造世间万物。不管是东方文化中的“阴”和“阳”,还是西方文化中的从“无”到“有”,都暗含着一个数学思想——二进制。
在前面的文章里,我们提到了编程语言历经了从机器语言到汇编语言,再到今天的高级语言这三个阶段。而第一阶段的机器语言就由二进制代码构成。二进制是现代计算机技术的基础,也是计算机天然的计数方法。今天,就让我们一起来了解一下计算机中的二进制。
一、二进制是什么?它是如何诞生的?
我们在讨论一些事物时,会本能直觉地认为它们只有两种可能,非黑即白、非好即坏,不成功即失败。可我们都知道,现实世界哪有那么简单,成年人世界哪有那么多对错。相反,在计算机的世界里就简单多了,在计算机的世界里就只有0和1。
计算机中所有的输入和输出,不论是呈现你最喜爱的电子游戏,还是联网播放有趣的视频,都是由无数个这样的二进制数字组合实现的。
和人们日常生活中使用的十进制计数法不同,二进制数仅由1和0两个数码组成。十进制里逢十进一,而二进制中则“逢二进一”、“借一当二”。二进制数和十进制数之间也可以互相转换。
二进制是如何发明,又如何在计算机当中运用的呢?
说到二进制的发明与应用,那就不得不提到两位大佬了:莱布尼兹和冯·诺伊曼。
第一位大佬是莱布尼茨,他是十七世纪的德国数学家和哲学家。
他的本职是律师,也是历史上少见的通才,被誉为十七世纪的亚里士多德。每一个学过高等数学的人对他的名字都不会陌生:他和牛顿先后发明了微积分,而莱布尼兹所发明的符号被普遍认为更综合,使用范围也更广泛。
除了数学,莱布尼兹在哲学上也颇有建树。他和笛卡尔、斯宾诺莎被共同誉为十七世纪三位最伟大的理性主义哲学家。莱布尼兹认为:“我的宇宙,在某种意义上是上帝所创造的最好的一个”。
莱布尼兹对数学和哲学的兴趣从他在推进二进制发展的过程中也可见一斑,很多人都不知道,莱布尼兹发明的二进制与中国古代的《易经》甚至有所联系。
1679年,莱布尼兹发明了二进制。次年,据说为了引起他心目中的数学爱好者康熙皇帝的兴趣,他写信给了当时在北京的两位传教士:Grimaldi(中文名字闵明我)和 Bouvet(中文名字白晋),阐述了自己的发明。
白晋知道了莱布尼兹的发明后非常吃惊,这位法国传教士对《易经》非常感兴趣,有深入的研究,而易经中的八卦、六十四卦卦象也正是仅仅由两个符号组成,即一条直线与两条短线。白晋将这一相似性告诉了莱布尼兹,莱布尼兹非常惊讶,他相信《易经》是具有数学意义的,也认为古代中国人可能已经掌握了二进制。
二、来回换算多麻烦,计算机为何采用二进制?
有人会问,用二进制表示大数来多麻烦,那为什么计算机不用十进制,而用二进制呢?
说到这儿,就不得不提到第二位大佬了。
冯·诺伊曼是一位真正的天才,也是一位真正的全才。无论是计算机、核武器、量子力学还是数学,你总能看到他的身影。
从20世纪初,物理学和电子学科学家们就在争论制造可以进行数值计算的机器应该采用什么样的结构。人们被十进制这个人类习惯的计数方法所困扰。所以,那时以研制模拟计算机的呼声更为响亮和有力。
计算机时代,计算机怎么识别0123456789呢。伟大的冯诺依曼为这事一脸愁容,折腾了一年,才发现问题出在十进制。
我们知道,计算机是由各种电子元器件组成,并由电流驱动的。电子计算机的底层结构是各种各样的电路结构。最基本的电路结构就是开关。通过开关的打开闭合,我们可以使电路通电或者断电。
这样,我们就有了对应于二进制所需的两种物理状态(通电或断电)。这两种状态可以很容易的区分(通过测量电压或电流就可以得出)并且可以快速转化(通过打开或关闭电源)。更神奇的是,开关可以很容易的被蚀刻在半导体上,形成超大规模集成电路,从而形成面积很小、功耗很低的电子计算机芯片。
如果计算机的某个物理特性可以有十个很容易确定,并且很容易互相转化的状态,计算机就可以采用和我们一样的十进制。但是,我们并没有找到包含10个稳定的,容易区分,且可以快速转化的状态的物理特性。
最让人焦虑的是图灵提出来的“计算思想”的问题,就算用电流计算的方式表示出10个状态,也没有办法让电脑真正思考啊。毕竟电子计算机除了计数之外,还有判断对错的问题。
20世纪30年代中期,冯诺依曼做出一个重要的决定:抛弃十进制,根据电子元件双稳工作的特点,采用二进制作为数字计算机的数制基础。
同时,他还说预先编制计算程序,然后由计算机来按照人们事前制定的计算顺序来执行数值计算工作。这个理论,便被人们称为“冯·诺伊曼结构体系”。冯·诺伊曼体系结构贯穿整个计算机史,从EDVAC到当前最先进的计算机都采用的是冯诺依曼体系结构。
1941年12月,德国人康拉德.楚泽完成了世界上第一台二进制设计的计算机。随着电子计算机的普及,二进制开始被普通人所熟知。
正如莱布尼兹早就指出的那样:“任何的计数制都有其存在的价值,今天十进制的广泛采用,只不过我们绝大多数人生来具有 10个手指头这个解剖学事实的结果。尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚。“
从莱布尼兹利用二进制改进加法机到计算机的发明与应用,自发明后二进迅速制成为计算机广泛使用的数制,因为它只使用0、1两个数字符号,相当于微小的开关:用1表示开,用0表示关,非常简单方便,易于用电子方式实现。
二进制与电子计算机是天作之合。尽管在计算机发展的早期,也发展过其他进制。如前苏联的三进制计算机。但最终,只有基于二进制的电子计算机迎来了大规模的发展。
三、十进制与二进制之间如何换算?
二进制与十进制之间是如何转换的呢?
正整数、负整数、小数各有不同的转换方式。
我们主要讲一下正整数是如何换算的。
十进制转二进制,方法是除二取余,然后倒序排列。
二进制转十进制呢?
二进制转十进制的方法有很多,常用的一种是从右到左用二进制的每个数去乘以2的相应次方并求和的方法。
在如下的图中,2在个位栏,4在十位栏,3在百位栏,即3个100,4 个10,2个1,也就是300+40+2=342。二进制则是由右至左每移动一栏就意味是前一栏的2倍。
在下面二进制的图表中,32位栏、8位栏和2位栏中都有1,依次相加32+8+2=42。我们就可以将42这个数字写为101010。所有的这些1和0就是计算机能懂的语言,即开和关,是和否,真和假。
二进制是计算机能懂的数字体系。值得庆幸的是,我们并不需要了解如何使用二进制编程来让代码在计算机上运行。现在使用电子计算机,直接输入十进制数即可,因为机器内部已专门编有(十)化(二)程序,可以自动转换。
写在最后
世界上有 1 0 种人,一种懂二进制,一种不懂二进制。0和1构成的二进制是数学对于世界最简单的解读,也是机器和人之间互相沟通,彼此交流的语言。编程与数学关联密切,学习好任一方,都有助于彼此的学习!