现在的位置: 首页 > 其他 > 正文

计算机为什么用二进制,我们从电脑的发明史来聊

2016年04月28日 其他 ⁄ 共 6357字 暂无评论 ⁄ 阅读 759 次
文章目录

二进制那么晦涩难懂,为什么电脑要用二进制呢?我也想了解这个问题,于是便收集了这些有趣有资料。

很多资料说采用二进制是因为成本低、出错率低等等各种理论,然后不小心搜到了一哥们叫“莱布尼茨”,这哥们牛X啊,提出了二进制的理论,还跟牛顿抢微积分的发明权,还跟国粹易经八卦有不小渊源。再追溯,又看到一个脑洞大开的哥们叫“查尔斯·巴贝奇”,想到了用机械去替代人计算数学问题。再然后又看到“齿轮计算机”这种奇怪的东西,再就是熟悉的“冯·诺伊曼”、“图灵”等一系列人物。整个串起来,感觉这是个非常有意思的计算机发明之路,于是便整理了出来。不要感觉枯燥,从人物所在年代来想,真的都是脑洞天才。

【齿轮计算机】

计算加减算法的十进制齿轮计算器:

在遥远的1623年,法国一个名叫布雷斯·帕斯卡(如雷贯耳的物理压强单位)的天才少年出生了,16岁便发现了我们称之为“帕斯卡定理”的圆锥曲线理论。1642年仅19岁时,为了帮助父亲从繁杂的税务统计中解脱出来,他研究了机器运转的传动机构,对设计图纸反复推敲。

他根据数的进位制(十进位制)想到了采用齿轮来表示各个数位上的数字,通过齿轮的比来解决进位问题。低位的齿轮每转动10圈,高位上的齿轮只转动1圈。这样采用一组水平齿轮和一组垂直齿轮相互啮合转动解决计算和自动进位,组成了一台计算机,这可称得上世界上最早的计算器了(不算史前文明、公元前和卡什尔的发明)。

帕斯卡的这台计算机可以计算到8位数字,表示数字的齿轮共16个,每个齿轮均分成10个齿,每个齿表示0~9中的一个数,并按大小排列。8个 齿轮在上面组成垂直齿轮组,从左到右构成8位读数,分别表示个位数、十位数、百位数……千万位数;另外8个齿轮在下面组成水平齿轮组,从左到右可以进行8位数的加减

帕斯卡计算机的发明是人类在计算工具上的新突破,它发明的意义远远超出了这台计算机本身的使用价值,它告诉人们用纯机械装置可代替人的思维和记忆,给了后人使用机械工具计算数学问题的指引。

【机械计算机】

计算乘除算法的十进制机械计算机:

又是17世纪的1646年,德国的名叫威廉·莱布尼茨(如雷贯耳的数学公式)的天才出生了,他和牛顿先后独立发明了微积分。莱布尼茨对计算机发展的重大贡献在于他发明了二进制(终于看到二进制的影子了),以及制成了可以做乘除算法的机械计算机。

莱布尼茨有趣的地方在与中国文化周易八卦之间的轶事,相传他发明二进制后,看到了传教带回的中国文化《周易》八卦,并发现八卦可以用他的二进制来解释,而且从哲学和神学上二者有惊人的相通之处!

莱布尼茨的机械计算机参考了帕斯卡的设计,但他认为只能做加减运算的齿轮计算机有极大的局限性,于是想设计一种可以做乘除算法的计算机。莱布尼兹计算主要由不动的计数器和可动的定位机构两部分组成。不动部分有12个小读数窗,分别对应带有十个齿的齿轮,用以显示数字。可动部分有一个大圆盘和八个小圆盘,用圆盘上的指针确定数字,然后把可动部分移至对应位置,并转动大圆盘进行运算。可动部分的移动用一个摇柄控制,整个机器由一套齿轮系统传动。莱布尼兹计算器的主要部件是梯形轴,即带有不同长度齿的小圆柱,圆柱的齿象梯形的样子。这种梯形轴是齿数可变的齿轮的前驱,有助于顺利实现比较简便的乘除运算;同时,把机器分为可动与不动部分的设计,导致滑架移位机构的产生,简化了多位数的乘除运算。莱布尼兹的这两项发明,长期为各式计算机所采用,在手摇计算机发展史上做出了重要贡献。

(说实话,我也没看懂它的原理,就是下面这个图,不过这个设计存在很多问题,最终并未能成功推广开来)

jixiejisuanji

莱布尼茨在思索数与算术的本质时,开创性的想到了2进制,并认为2进制可能是连接哲学、神学与数学的重要枢纽。在他与从中国回来的传教士交流,并认识到2进制正是《易经》的核心思想后,便有了更大的动力。莱布尼茨琢磨有可能建造一台以2进制为基础的计算机,但他似乎还是觉得只有10进制才有实用意义。

【差分机与分析机】

到了1792年,英国的巴贝奇出生了,他一生的大部分时间都在研究分析机上,为现代电子计算机奠定了基础。

1812巴贝奇从法国人杰卡德发明的提花织布机上获得了灵感,差分机设计闪烁出了程序控制的灵光──它能够按照设计者的旨意,自动处理不同函数的计算过程。1822年,巴贝奇小试锋芒,初战告捷,第一台差分机呱呱坠地。但是,这一“小试”也耗去了整整10年。

其后20年,他都在升级差分机的道路上不断尝试前行但并未成功,这也造成了他生活上的窘迫和科学界歧视的目光。就在这痛苦艰难的时刻,英国大名鼎鼎的诗人拜伦的独生女,伯爵夫人——阿达·奥古斯塔十分理解并且深知巴贝奇这项发明的重大意义。她写信给巴贝奇对他的工作表示理解而且还希望与他共同工作。就这样,在阿达27岁时,她成为巴贝奇科学研究上的合作伙伴。30年的困难和挫折并没有使巴贝奇折服,阿达的友情援助更坚定了他的决心。

1834年,巴贝奇提出了一项新的更大胆的设计。他的目标不是仅仅能够制表的差分机,而是一种通用的数学计算机。巴贝奇把这种新的设计叫做“分析机”,它能够自动解算有100个变量的复杂算题,每个数可达25位,速度可达每秒钟运算一次。巴贝奇首先为分析机构思了一种齿轮式的“存贮库”,每一齿轮可贮存10个数,总共能够储存1000个50位数。分析机的第二个部件是所谓“运算室”,其基本原理与帕斯卡的转轮相似,但他改进了进位装置,使得50位数加50位数的运算可完成于一次转轮之中。此外,巴贝奇也构思了送入和取出数据的机构、以及在“存储库”和“运算室”之间运输数据的部件。一个多世纪过去后,现代电脑的结构几乎就是巴贝奇分析机的翻版,只不过它的主要部件被换成了大规模集成电路而已。仅此一说,巴贝奇就当之无愧于计算机系统设计的“开山鼻祖”。

柔弱的数学才女阿达为分析机编制一批函数计算程序,其中包括计算三角函数的程序、级数相乘程序、伯努利函数程序等等。阿达编制的这些程序,即使到了今天,电脑软件界的后辈仍然不敢轻易改动一条指令,人们公认她是世界上第一位软件工程师。

分析机终于没能造出来,他们失败了。巴贝奇和阿达的失败是因为他们看得太远,分析机的设想超出了他们所处时代至少一个世纪!而且,当时的工艺水平也不足以支撑分析机零件所要求的精密程度。然而,他们留给了计算机界后辈们一份极其珍贵的精神遗产,包括30种不同的设计方案,近2100张组装图和50000张零件图,更包括那种在逆境中自强不息,为追求理想奋不顾身的拼搏!

差分机原理:

差分机是一台多项式求值机,只要将所求值的一元多次方程式输入到机器里,机器每运转一轮,就能产生出一个值来。其主要运用的原因是差分方程式与迭代计算,以F(x) = x²+2x+3为例。

启动差分机,它会在每轮运算中吐出结果值如:F(0)=3 F(1)=6 F(2)=11 F(3)=18等,直到系统停止,在机器动作过程中,其实用到的只是加减法,具体原理如下:
chafenji

1)我们看到在F(2)时有完整的一阶差分和二阶差分了,其中F(2)=11,F(2)-F(1)=5,即F(2)的一阶差分是5。二阶差分是一阶差分的差,即(F(2)-F(1))-(F(1)-F(0))=5-3=2。

2)F(3)的值为18,同时,我们惊奇的发现现象"F(3)=F(2)+F(2)的一阶差分+F(2)的二阶差分”,即F(3)=11+5+2=18。

3)再验证F(4),我们计算得到F(4)=27,而“F(3)+一阶差分+二阶差分”,即18+7+2=27!同样,对于后面所有值,该规律也是契合的。

因此,对于差分机,我们只需要给出几个初始值,然后按指定的规则一轮轮运行,就能得到我们想要的一元多次方程的值!

第一台差分机预计完工后将有25,000个零件,重15吨。可惜,因为大量精密零件制造困难,加上巴贝奇不停地边制造边修改设计,从1822到1832年的十年间,巴贝奇只能拿出完成品1/7的部份来示范。最后,由于成本严重超支,差分机引擎一号也很不幸地一直未能完成,已经完成的12000个零件被熔掉回收。差分机引擎一号如果完成的话,它可以计算到第六阶差,最高可以存 16 位数。

经历了差分机的失败,1834年巴贝奇又设计出了一台更加野心勃勃的机器,称为分析机引擎。它的机械结构被分成了「计算单元」「储存单元」两个部份,其中计算单元不仅内建四则运算,而且还可以「存」四组不同的运算方程式,用穿孔卡片(Punch Card)加载到机器里。这台机器在设计上甚至有能力进行条件分支(if)、循环、平行处理等程序逻辑,只是巴贝奇的年代自然还没有这些名词的出现。最后的结果还可以选择印刷、打卡、绘图等多种输出方式,从某些方面来说,它计算、储存、I/O 三项分离的设计,和今日的计算机并无二致,只是最后分析机引擎只停留在了纸上,从没做成实机过。

来看看伦敦科学博物馆照着巴贝奇的图纸,打造的一台完整的差分机引擎吧。

【现代计算机】

说现代计算机不得不说两位牛人,图灵(苹果公司的标志就是为纪念他的)和冯·诺依曼。图灵1912年生于伦敦,被称为计算机之父和人工智能之父。冯·诺依曼生于1903年,被称为计算机之父和博弈论之父。

虽然冯·诺依曼将计算机之父的名号归于图灵,然而,这无法掩盖他对计算机发展的极大贡献。

至于现代计算机的原理,要了解的内容实在是太多,这就放到以后有时间再慢慢整理了。

【计算机为何采用二进制】

这里只是初探一下,以后有时间再慢慢深入。

二进制的优点:

(1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。

(2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。

(3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。

(4)易于进行转换,二进制与十进制数易于互相转换。

(5)用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。

下面,再看一篇非常有意思的关于理解二进制的文章:

作者:Jeffersli

链接:https://www.zhihu.com/question/20830886/answer/48079392

来源:知乎

很多专业人士从第一次学计算机,就开始接触二进制,发现书上说的基本都是术语,不是“人话”,马上晕倒。二进制是什么?什么“逢二进一”,这都不重要,狗屎。只要是人发明的东西,用人话就能讲清楚。

咱们就用人话,看看能不能讲清楚“二进制”。

咱们穿越啦,回到古代。你在一个烽火台上,我在另一个烽火台上,只要你那边来敌人,你就点狼烟通知我。这个能懂吧?现在,我想清楚的知道你那儿来了几个敌人,我好做准备工作。怎么办呢?很简单,两个办法。

1、你点一次火,再灭掉一次,算是一个敌人,来两个就点2回,灭两回。

2、或者你同时点两堆火。我就知道,是来了两个敌人。

我去,你说要是敌人来了200个怎么办?你那边要么熏死,要么火堆多到足够自焚了……

朝代在发展,人类在进步。一晃爱迪生来过地球了,他发明灯泡了。

你可以用灯泡“亮”和“灭”来跟我表示这个信息。

如果一个灯泡没亮,说明没有敌人。灯泡没亮,也可以说是状态0。

如果来了一个敌人,灯泡亮了,我就知道来了1个,这就是状态1。

问题又来了,还是来了200个敌人……我去,要么你开关200次灯泡,要么准备200个灯泡一起亮。第一个方法灯泡质量也不一定好,再说,你闪那么快,我也数不过来。第二个方法,我数也得数小半天,没数完,早被敌人冲过来砍死了。还有,200个灯泡,你确定你那儿电费余额够不?

好在咱们都是聪明人,咱们约定,多安几个灯炮打暗号。为了不用画图,0代表关灯,1代表开灯。

00000000,8个灯全关,放心睡觉,这是状态0,说明一个敌人没有,平安无事。(状态0)

00000001,这说明来了一个敌人,你负责干掉他就行了。(状态1)

00000010,这是第二个能表示的状态,咱们给它个编号,叫状态2,说明来了两个敌人,也没啥大事。

接下来,应该是第三种情况了。00000011,这就是第三种情况。咱们不说换算什么的,这种亮灯的方法咱们就叫3(状态3)。

为了让咱俩都明白,咱们写个清单(文章最后)出来。由清单能看出来,如果来了255个敌人,你直接打开8个灯泡,我也就一目了然,准备刀枪就上了。

因为电脑也一样,只有开和关(通电、断电)来表示两种状态。这就叫“二进制”了。至于2进制怎么计算,也很简单,比如第一种状态(1)+第二种状态(2)=第三种状态(3)。你看:

00000001

+00000010

---------

=00000011,按表格一找,是3,就是这么简单。

所以,脑子里别想着10进制和2进制怎么换算,这些脏活儿累活儿,可以电脑去干。你只要记住表格里的“二进制第几种状态就是10进制中的几”就可以了。

还有,磁盘里的2进制,用磁铁的N极和S极表示1和0,N=0,S=1,把硬盘放大了1000万倍看看,上面都是小磁铁,通过硬盘的磁头识别,再变成电流信号“通”和“断”来交给CPU处理。

那光盘上也一样,光盘上是用“长”和“短”的小镜子来表示1和0。把光放大了1000万倍看看,上面都是长点和短点,用激光头一照,根据反光的长度来表示数据。

那数据多了怎么办?8个编成一组,叫1byte,也就是传说中的1个字节,是由8个0或1组成的,每个0或1叫1bit。通常,一个英文字母需要8个灯泡表示,一个汉字需要16个灯泡表示。

顺便说一下,一下能让我看清8个灯泡亮没亮的方法,叫“并行”(8位),用1个灯泡来回开关,妄图晃瞎我的传递数据的方法叫“串行”,也就是一串信号的意思。所以,频率相同的情况下,“并行”肯定比“串行”快。

想一次能处理的信息越多,就需要越多的“位”数,比如你家CPU是64位的,就相当于一次能传递64个灯泡组成的信息。

先讲这么多吧,中心思想只有一个“技术课讲的好,也很有意思!”

再赠送一个知识点,在EXCEL里可以用公式=DEC2BIN()来换算。

附表:

10进制编号    灯泡表示

状态         1       00000001

状态         2       00000010

状态         3       00000011

状态         4       00000100

状态         5       00000101

状态         6       00000110

状态         7       00000111

……(以此类推)

状态         250  11111010

状态         251  11111011

状态         252  11111100

状态         253  11111101

状态         254  11111110

状态         255  11111111

 

【文章参考】

http://baike.baidu.com/view/1173581.htm

http://baike.baidu.com/view/483494.htm

http://baike.baidu.com/subview/301371/19609528.htm

http://www.guokr.com/article/437228/

http://baike.baidu.com/view/18536.htm

http://cn.engadget.com/2011/04/27/charles-babbages-difference-and-analytical-engines/

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?