秒速飞艇开奖网: 秒速飞艇计划app

北京 切换校区

全国24小时免费热线

400-009-1906

从1加到100:一道简单的数学题挑战下你的大脑

时间:2019-01-09   来源:尚学堂   阅读:308

  所谓编程,就是把自然语言的需求翻译成计算机语言,让计算机去执行。对于刚入行的人,理解CPU和内存是怎么在一起工作的,绝对是基础中的基础。

 

  1、CPU和内存

  如果我们简化一下,CPU和内存其实特别简单,内存就是一个个的小格子,每个格子都有一个编号,格子中的数据可以被CPU所读写。

  CPU内部的构造超级复杂,但我们这次只关注两个东西:

  一是运算器,可以做各种运算,但是有个限制,这个运算器不能直接操作内存进行运算,他在运算时使用的是内部的数据格子(学名叫寄存器),为了区分开,我把他们叫做R1,R2,R3,R4,假设只有这么4个,统称Rx。

  CPU必须把数据装载到寄存器中才能运算。

  CPU运行速度快的令人发指,但是它能做的事情却简单的令人发指,主要是以下四种:

  (1)从内存的某个格子中读取数据放入自己内部的寄存器Rx

  (2)把Rx的数据写入内存的某个格子中(会把原有数据覆盖)

  (3)进行数学运算和逻辑运算

  (4)根据条件进行跳转

  数学运算就是加减乘除,逻辑运算就是AND,OR这样的基本运算,没接触过的暂时可以不用深究。

  根据条件进行跳转就是从一个指令跳转到另外一个指令,下文会详述。

 

  2、从1加到100

  现在我们试图用一个例子来揭开CPU和内存的神秘面纱,这个例子就是把1,2,3,4,.....97,98,99,100这100个数字加起来。

  如果你看过数学王子高斯小时候的故事,自然很简单,不就是101*50=5050吗?

  作为码农,我们需要用上面的简化计算机来解决这个问题:我们需要精确的告诉CPU来指令,让它去完成这个加法运算。

  切记切记:内存只是一个个可以读写的格子,CPU简单到只能做上面描述的4件事。

 

  3、热身

  在正式开始之前,我们先来热一下身,把你的思维切换一下,用这个“简陋的”计算机计算一下50+60,我门需要告诉CPU这些指令:

  指令1:把数字50放到编号为#1的格子里

  指令2:把数字60放到编号为#2的格子里

  指令3:把格子#1的数字取出来,暂时放到CPU内部的寄存器R1中

  指令4:把格子#2的数字取出来,暂时放到CPU内部的寄存器R2中

  指令5:把R1和R2的值相加,结果放到R1中

  指令6:把R1的结果放到编号为#1的内存格子里。

  真是不容易啊,因为CPU不能直接操作内存进行加法操作,需要把数据从内存和CPU之间搬来搬去,最后才完成了这么一个简单的运算。

 

  4、正式出发

  热身完毕,正式出发!

  回到那个从1加到100的题目,我们的指令如下所示,CPU需要依次执行(除非遇到跳转指令),直到结束:

  指令1:把数字0放到编号为#1的格子里

  指令2:把数字1放到编号为#2的格子里

  指令3:把#1号格子的数取出放入CPU寄存器R1(即R1的初始值为0)

  指令4:把#2号格子的数取出放入CPU寄存器R2(即R2的初始值为1)

  指令5:把R2的值和100比较,如果小于等于100,执行第6个指令,否则执行第9个指令

  指令6:把R1和R2的数据加起来,结果放入R1

  指令7:把R2的数值加1

  指令8:跳转到第5个指令

  指令9:把R1的值写回到编号为#1的格子里

  (注:#1号格子的值就是结果)

  这里提示一下:R2表示的就是从1到100这些数字,R1存放的就是中间和。

  现在,请你在脑子里边模拟一下这个过程,看看程序能不能成功结束,把最终结果放到#1号格子里。

  如果觉得脑子不够用,建议拿一个纸和笔,把自己当成CPU,把上面的这些指令手工的执行一遍,体会一下这个过程。

  如果你是非科班出身,并且能迅速的理解上面这些指令是如何完成从1到100的加法的,恭喜你,你很适合学习编程,光明的前途在前面向你招手。

  我们上面所说的指令和汇编非常相似,这是一种非常贴近机器,非?!暗图丁钡募扑慊镅?。

  用这种语言来编写大型程序,会把人活活累死。

  当然话也不能那么绝对,对于那些大神级别的程序员来说,汇编也是小菜一碟。KenThompson和DennisRitchie不就用汇编写了第一版的Unix操作系统吗?求伯君不就用汇编写了WPS吗?

  对于普通人来说,大神们给我们创造了高级语言让我们使用,如果我们用高级语言把上面的例子再写一遍,你应该很容易能看明白了:

  不要被之前的“低级”指令吓住,这才是码农每天打交道的代码,不过这种高级语言写的代码最终也要被编译成“低级”语言代码,最终交由CPU来执行,编译后的机器语言,其实和上面的指令差不多。

 

  5、思考

  为什么要拿这个例子来挑战小白的大脑呢?从本质上来说,码农整天做的就是这样的事情,告诉计算机使用这些指令去运算,我们需要养成面向计算机的思维方式。

  CPU能干的事情非常有限,笼统来说就是上面那四种,但是我们现在上网、听歌、看视频、玩游戏,最终都会归结到这些操作中来,这就是计算的本质。

  此外,CPU是如此的冷酷,以至于你的指令出一点点错误就不给你正确结果,例如你把第3个指令中的“如果小于等于100”,不小心写成了“如果小于100”,

  CPU当然不会告诉你程序中有问题,他只会冷冷的执行,最后你会发现:这结果怎么不对呢?

  还有一个问题,CPU在运行的时候,从哪里取获得那些指令?

  估计你已经想到了,对,就是内存,指令也需要在内存中才能够被CPU访问到,CPU从内存读到指令以后,会进行分析(译码),看看这个指令是干什么的,然后再进行运算。

  所以我们的内存小格子中不仅仅存放的是数据,还存放着至关重要的程序指令!我们需要告诉CPU第一条指令在什么地方,然后CPU就可以疯狂的开始运行了:

  这些指令在内存中肯定不是我们看到的自然语言,而是二进制的表示。

  那内存的数据又是从哪里来的?肯定是硬盘了,我们写好的程序会放在硬盘上,在运行的时候才调入内存。

相关资讯

  • 北京校区
  • 山西校区
  • 郑州校区
  • 武汉校区
  • 四川校区
  • 长沙校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办

北京海淀区校区(总部):北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE培训、 大数据就业班培训、 大数据云计算周末班培训、 零基础大数据连读班培训、 大数据云计算高手班培训、 人工智能周末班培训、人工智能+Python全栈培训、 H5+PHP全栈工程师培训

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

郑州学区地址:河南电子商务产业园6号楼4层407
咨询电话:0371-55177956

武汉学区地址:湖北省武汉市江夏区江夏大道26号 宏信悦谷创业园4楼
咨询电话:027-87989193

四川学区地址:成都市高新区锦晖西一街99号布鲁明顿大厦2栋1003室
咨询电话:028-65176856 / 13880900114

网址://www.cssxt.com/
咨询电话:0731-83072091

深圳校区地址:深圳市宝安区航城街道航城大道航城创新创业园A4栋210(固戍地铁站C出口)
咨询电话:0755-23061965 / 18898413781

上海尚学堂松江校区地址:上海市松江区荣乐东路2369弄45号绿地伯顿大厦2层
咨询电话:021-67690939

广州校区地址:广州市天河区元岗横路31号慧通产业广场B区B1栋6楼尚学堂(地铁3号线或6号线到“天河客运站”D出口,右拐直走约800米)
咨询电话:020-2989 6995

保定招生办公室

地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

Copyright 2006-2019 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
媒体联系:18610174079 闫老师  

Java基础班,免费试学三周

851| 181| 460| 145| 253| 147| 172| 38| 911| 347|