一个故事讲完CPU的工作原理

上二年级的小明正坐在教室里。现在是数学课,下午第一节,窗外的蝉鸣、缓缓旋转的吊扇让同学们昏昏欲睡。此时,刘老师在黑板上写下一个问题:

6324 + 244675 = ?

小明抬头看了一眼,觉得这两个数字挺眼熟。他昨天翘课去网吧了,因此错过了刘老师讲的竖式计算加法。

“同学们算一算这道题。”刘老师和蔼可亲地说道。

小明盯着黑板懵逼。

小学二年级的他面对这样一道世界级难题,束手无策。小明伸出了自己的左手,打算用一个古老而深邃的方法--掰手指--尝试一下。

小明发现他的每只手只能输入0-5中的正整数,和的范围仅限于0-10,离6324还十分遥远。

“慢着!”小明看向了自己的左手。他发现,事情有一点不对劲。

我们也来看看小明的左手。这只左手有5根手指,我们把5根手指都伸开来记为11111,5根手指握拳记为00000,手背面向我们,左手小指是第一个1/0。

小明紧紧地握拳,然后伸出大拇指,此时的左手为00001。“如果,”小明想,“这样是1”。

他缩回拇指,伸出食指,此时的左手为00010;“这样是2”。

他又伸出拇指,此时的左手为00011;“那么这样是3”。

他缩回拇指和食指,伸出中指,此时的左手为对着自己竖中指00100;“这样就是4!”

.....小明的左手飞速运动着,直到五根手指都伸直,像是钢铁侠射了一发掌心炮11111;“这样就是31!一只手可以表示0-31中的任意正整数!”

小明为自己的发现感到激动。可他不知道怎么表示加法。

小明的同桌,英语课代表小红,看他摆弄了半天左手,忍不住问他在干什么。小明解释了他的发现。小红听了小明的一番高论,若有所思,提笔在数学书的封底画了一个表格:

小红画的表格

“如果我们能造一个机器,给它三个输入,它能返回两个结果,那我们就能算出这道题!”小红激动地说。

“啥叫进位啊美女?”小明问道。

“就是你列竖式的时候画的一小撇”,小红回答。

“猎术士是什么,我知道猎魔人和古尔丹。”

小红于是讲解了一下怎么列竖式计算十进制加法。“我懂了。”

小明说着,拿过小红的数学书,补全了表格:

小明试着补全表格

“是这样吗?”小明问小红。

小红拿过来看了看,说:“最后一行写错了,输出结果应该是1。你想啊,1+1+1应该等于11,左边这一位是输出进位,右边这一位是输出结果,都是1,所以输出结果应该是1。”

“噢。”小明又拿过书来,拿起橡皮铅笔改正:

小明改好了

“那为什么这个机器能算加法?我还是不懂。”小明问。

“假设我们已经造出来了这么个机器,长这样”小红继续在封底上画着:

小红画的机器

“等会等会,怎么变成英文了,我英语不好。”小明叫道。

“hmmm看来你没读双语幼儿园。左边这三个是输入,右边是输出,C是进位,C-in是输入进位,C-out是输出进位,Sum是和的意思,明白了么?”小红解释道。

“噢好。”

“假设我们已经造出来了这么个机器,造了好几个,我们这么连起来...诶纸不够大,我写不下了。”

小明一听,赶紧从书桌膛里翻出来一本草稿纸,生怕同桌变成费马。

“谢谢。先这么连起来:”

小红画图中

“哦哦哦我懂了,A和B就是两只手,最右边这个one-bit-adder计算的是最小位数的和!”小明说道。

“正确!”

“你这样连的话,是说最小位的输出进位就是下一位的输入进位,下一位的输出又是下下一位的输入!天啊,这跟列竖式好像。”小明惊叫。

“Absolutely!”小红回答道。

小明又拿过草稿纸,接着画起来:

小明画图中

“把对应的每一位连到每一个adder里...”小明念念有词,“...再汇总一下输出”:

小明画的加法器

“成了!这个东西可以算两只手加法的结果!”小明高兴极了。

“可是离6324和244675还是太远了,输入5位远远不够呀。”小红皱了皱眉头。

“不不不!你在掰手指的时候有没有发现,每多一根指头,能表示的数就会多出来一大堆,我觉得只要加那么十几个就够了!1根指头能表示2个数(0,1),2根指头四个数(0,1,2,3),3根8个...”

“是2的倍数!”小红接道,“小明,我觉得你的这个记数方法很有意思,要不叫小明式吧!”小红凝望小明的目光中有了一丝羞涩。

“二进制。”

身后忽然传来低沉的声音。两人同时回头,发现数学课代表小刚正直勾勾地盯着那张草稿纸。他好像已聆听多时了。

“叫二进制吧,我看蓝猫淘气三千问讲过这个,一模一样,蓝猫说这是二进制。”小刚补充道。

小刚的数学成绩是班里最好的,一进学而思就上的超常班。小红只能上尖子班,小明一般去网吧。

“那就叫二进制吧。”小明说。

他和小红转过身来,老师让小组讨论的时候他们就这么坐。

小刚又道:“可是,怎么造出这个one-bit-adder呢?”他的眉头皱成一团,眼镜片看起来更厚了。

小明和小红也陷入了沉默,三人一筹莫展,陷入僵局。这时,小刚的同桌,物理课代表小兰入局。

她忽然说道:“我听物理办公室的陈老师吹牛,他当年在大学里读电子工程,GPA一直是4.3,用实验室的导线开关和小灯泡就能造一个32位的加法器,不知道是怎么做到的。他还说什么与门是and,或门是or,再加一个非门not,用它们表示逻辑,就能造出世间千千万万的计算机。”

小明听迷糊了,“等会等会,什么门?金拱门?”另两人也露出迷茫的表情。

小兰从桌子里掏出一个黑盒子。“这是下节课要用的教具,陈老师让我先拿着。”

她打开盒子,取出三个零件和一个说明书。

“喏,你们看看这个”,她拿起第一个零件,“这个叫与门,有两个输入和一个输出。如果我们把输出连上小灯泡,接上电源,两个输入分别连上开关,那么是这么个情况:”

小兰画的表格

“就是说,只有两个开关都闭合了,小灯泡才亮,有点像串联电路。”小兰补充道。

“诶,有意思了...”小刚扶了扶眼镜,似乎打算说什么,大家都看向他。

“没,没什么,我还在想,小兰你接着说。”

“那好。”小兰接着拿起第二块零件。“这个叫或门,有一个开关开着灯泡就会亮...”

“等下!”小刚忽然打断,拿起笔在自己的白纸上画起来:

小刚画的表格

“是不是这样!”小刚激动地说,“如果0是关1是开,0是灭1是亮的话,或门的输入输出是不是这样?”

小兰看了看道:“正是”。

她拿起第三个零件,“最后这个叫非门,只有一个输入,一个输出。它会输出一个相反的结果:输入有电流,输出就没有;输入没有电流,输出就有电流。用小刚的话来说,输入0输出则为1,输入1输出则为0。太简单了,懒得画表了。”

小兰把非门放在桌上。小刚说道:“这三个门可以表示三种逻辑。如果A、B是输入,  A or B 就是经过或门的结果,  A and B就是经过与门的结果,  not A 则是A经过非门的结果。”

三人纷纷点头。“可是,这和加法有什么关系呢?”小明问道。

四人再度陷入沉默。

沉默。

忽然,小明拿起笔,一边画一边说道:“如果我们回去看小红画的表格,”

左三列是输入,右二列是输出

“Sum可以写成A、B、Cin的逻辑关系!”

“你们看,把 A and B 记作 AB,A or B 记作 A + B,not A 记作 A 上面画个横线。Sum 输出为1只出现在表格的2、3、5、8行,也就是三个输入中1的个数为奇数的时候。我们把这4种情况记下来,那么这个式子...”

“可以拿逻辑门实现!!!”四人异口同声的叫道。

小红抢过草稿纸,又看了看物理教具的说明书,边画边说了起来:“说明书上写,这个火车头形状的符号表示 and gate;这个B2轰炸机形状的是or gate;这个小人形状的是not gate...”

小红画的与门,或门,非门

她又看了一眼小明的式子,说道:“这个式子的第一项可以这样...”

小红画的输出和的第一项

"你们看你们看,这个不就是

嘛!"小红自豪地说。

小明补全了电路:

“先把与门都画了”

“再把或门都加上,搞定。这东西可以算出Sum了,接下来用一样的办法把C-out弄出来。”小明准备继续画。

“你们看,这里还有几个零件。”小兰指着说明书说道:

与非,或非,异或,同或

“与非门:一个与门的输出和一个非门相连,英文是not and,NAND gate。那个小圈圈代表一个非门。

或非门是或门 + 非门,not or,NOR gate。

第三个叫异或门,只有两个输入中一个为1一个不为1时,才会输出1,exclusive-or,XOR gate。

第四个是同或门,也就是一个异或门加上一个非门。”

“啊哈!”小刚灵机一动,抓起笔来道:“我有一个绝妙的点子。”

小刚简化后的电路

“小明的方案,要用17个门。我只要2个异或门就搞定了,牛逼吧?”

三人瞪大了眼睛,仔细思考后纷纷点头道:“牛逼,牛逼。”

小刚随即画出了完整的one-bit-adder电路:

小刚的one-bit-adder

小明从教具盒里拿出电源、小灯泡、开关和逻辑门,按照设计图制作出了全加器:

看到小刚的设计被完整的实现,小明欣喜:“啊哈哈哈,吾有上将小刚,则霸业可成,汉室可兴啊!”

他把黑盒子里的零件全拿了出来,四人忙碌地工作着。很快,他们拥有了5个全加器,基于小红的设计连了起来:

小红设计实现

“二进制的01100等于十进制的12,01010等于10,12+10=22,等于16+4+2,也就是二进制的10110...”

四人人往代表输出结果的5个小灯泡望去:亮,灭,亮,亮,灭;正是10110!

“成了!!!”

大家激动的拍打课桌为了计算黑板上那道题,四人一共制作了32个一位全加器,将它们连接后,一个三十二位加法器便诞生了。

他们历经艰辛,踩着自然规律和人类智慧的肩膀,把自己从枯燥的加法计算中解放出来!

窗外的蝉鸣渐渐平息,头顶的吊扇不再转动。

“刘老师,答案是250999!”小明站了起来,声若洪钟大吕,震慑天地。

他和小红、小刚、小兰分别对视了一眼,收获了坚定的目光。

这目光,连同面前的32位加法器,如同新的转机和闪闪星斗,正在缀满没有遮拦的天空。

刘老师点了点头,欣慰的说道:“很好,看来四位同学对这部分知识掌握的不错!我们再来看几道题!”

他转过身,拿起板擦,把黑板擦了个精光,又从黑板槽里拾起半截粉笔,写了起来: 

1. 244675 - 6324 = ? 

2. 3.14159 + 5.535897 = ? 

3. 17 * 45 = ? 

4. 3 / 2 = ?

一连四道题,让四人组陷入了深思:如何让自己的机器运算减法?乘法?除法?浮点数?

刘老师并没有停下,手中的粉笔运动得越来越快:

5. Fibonacci 数列的第103项?

6. 一圈共有N个人,开始报数,报到M的人出列,然后重新开始报数,问最后出列的人是谁?.

.....

疑惑越来越多了:如何存储?怎样实现分支?保证效率?

刘老师仍未停下,黑板快被写满了:

103. 方程ζ(s)=0的所有有意义的解都在一条直线上吗?

104. 大于2的偶数都可以写成两个质数的和吗?

......

134. 生命,宇宙及所有事物的答案?

刘老师放下了粉笔,半截粉笔已经变成硬币的厚度。

“这些问题,我们能造个机器回答么?”小明撑着头,喃喃自语。

本文转自网络、知乎,如涉及版权请联系删除!


  回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axure弹窗关闭_干货来袭,Axure插入图标的几种办法

前言在日常绘制原型的时候,经常会需要插入相应的图标(icon)到Axure中,但是看似好像很简单的事情也给蛮多小伙伴造成了困扰。现在很多开发团队都会用一些比较常见的前端框架来搭建后台管理系统,例如常见的Element-UI&am…

用指针实现高低位倒序,疯了吧

昨晚在微信群看到一个读者发的面试题目,从网上截图出来的,我百思不得其解,题目如图。幸好,我学过栈栈,C语言实现然后我写了个小程序第一个方法比较笨,当我写完自己的代码后,看到有同学发了自己的…

部署nexus服务

一、安装和启动 官网下载nexus-2.12安装包,地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.12.0-01-bundle.tar.gz 此版本需要预先安装jdk1.7 解压后,用命令【./bin/nexus start】来启动 nexus有如下一些控制命令&…

天然气表怎么看多少方_上海考大学难度怎么样?看2019上海高考“成绩分布表”和“本科分数线”就知道了!...

参加高考的同学和家长们注意了~上海市教育考试院近日发布本市普通高等学校秋季招生本科各批次录取控制分数线和成绩分布表。艺术类、体育类本科文化控制分数线也同步公布。(鲁申君注:上海2019年高考本科总分660,专科总分450,不分文…

关于Linux内核代码不使用typedef的讨论?

C语言关键字 -(typedef关键字)typedef有点像火隐忍者里面的万花筒写轮眼,用起来非常炫酷有型,使你的代码更加简短,让你穿上你亲妈都认不出你的马甲…比如这样一段代码typedef struct point{int x, y;} Points;Points f…

基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...

引言:本文介绍利用华为ModelArts进行深度学习的图像分类任务,不用一行代码。今年8月9日,在华为史上规模最大的开发者大会上,华为正式发布全球首个基于微内核的全场景分布式OS——鸿蒙操作系统(HarmonyOS)。但你知道吗?…

洛谷P3405 [USACO16DEC]Cities and States省市

P3405 [USACO16DEC]Cities and States省市 题目描述 To keep his cows intellectually stimulated, Farmer John has placed a large map of the USA on the wall of his barn. Since the cows spend many hours in the barn staring at this map, they start to notice severa…

天线的原理

关注、星标公众号,不错过精彩内容来源:中兴文档小时候家里的收音机、电视机,都带着可以灵活转动拉伸的杆子,大家一定对这个可以转来转去的杆子记忆犹新,或许也好奇的发现这个杆子的长度与方向和收音机、电视的接收效果…

2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考

论文:Rethinking Depthwise Separable Convolutions: How Intra-Kernel Correlations Lead to Improved MobileNetshttps://arxiv.org/pdf/2003.13549.pdf​arxiv.org代码地址:zeiss-microscopy/BSConv​github.com一、背景一些轻量级的网络,…

Node.js 得到当前目录下文件修改文件名

博客园第一篇,平时都用 .net ,现在 node.js 比较火,就用它做一些小工具,比较方便 Node.js 得到当前目录下文件修改文件名,把 .txt 修改为.md var fs require(fs); var fileDirectory __dirname if (fs.existsSync(fileDirectory)) {fs.readdir(fileDir…

原来你也在写公众号

现在凌晨1点,我睡不着,因为今天打球了,每次打球回来我总是睡得很奇怪,奇怪有时候打球回来一躺下就睡着了,有时候打球回来就会习惯性失眠。脑海里总是浮现各种打球的进球动作,然后各种幻想,再加上…

中的数组怎么转成结构体_PLC知识,什么是数组和结构体?

今天给大家介绍一下什么是数组,什么是结构体,关于数组我们会介绍数组的定义、它的使用方法,关于结构体我们会介绍结构体的使用、怎么去建立一个结构体等知识,之前也是有部分学员有问过这些问题的,那么都一块儿给大家讲…

MMU那些事儿

最近在重新看这部分知识点,内存管理和进程调度应该是Linux下最核心的两个东西,不管你做得多牛逼了,这两点拿出来讨论,总是会让人眼前一亮,或者是可以讨论很久很久,这篇文章,读完后可能也可以让大…

51Nod 1530 稳定方块

瓦西亚和皮台亚摆放了m个方块。方块被编号为0到m-1(每个号码出现恰好一次)。现在建立一个座标系OX表示地面,OY的方向是竖直向上的。每一方块的左下角有一个座标而且是整点座标。 摆放好的方块一定要是稳定的。稳定的含意是每一个不在地面上的方块在他的下面至少有一…

C语言、嵌入式中几个非常实用的宏技巧

宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印。特别是对于异常情况的打印,我们需要快速定位到异常情况的位置。这时…

canvas 多次画图效果_canvas练习之终极的奔跑小人

这次做一个终极的练习,先看一下最后的效果。一个不停奔跑的小人,点击鼠标后会让他跑到目的地,并且呈现不同的角度。下面来看一下如何一步步来实现它的。准备网上下载了一张图片,其中包含了小人面向不同角度奔跑的各个分解动作。新…

loadrunner11安装,提示少了Microsoft Visual c++2005 sp1运行时组件解决办法

解决方法:1、进入loadrunner-11\Additional Components\IDE Add-Ins\MS Visual Studio .NET2、安装:LRVS2005IDEAddInSetup.exe3、再安装loadrunner破解方法:1、把loadrunner相关程序全部退出;2、把lm70.dll、mlr5lprg.dll放到安装…

C语言的爱你永不悔

#前言今天是520节,昨天晚上睡觉的时候,我家地瓜一直说520,520,我不知道要干啥,我就说,要睡就睡,不睡就起来。今天我看了朋友圈,我才知道原来520就是「我爱你」的意思。今天在朋友圈看到的一个小…

服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)

Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能: 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成视图…

l4 l7 代理_什么是四层(L4 proxy)和七层负载均衡(L7 proxy)?区别是什么? 翻译自Nginx官网...

阅读前的小说明:由于工作需要,本人正在研究微服务架构。而微服务的服务网格( Service Mesh )架构中,需要选择一种 proxy 作为每个微服务之间通讯的代理。因此为了定夺微服务中常用的两种代理,即: Nginx 和 Envoy 如何选…