CPU到底是什么东西?它为什么能够执行数学运算?
CPU到底是什么东西?它为什么能够执行数学运算?
本文地址http://yangjianyong.cn/?p=20转载无需经过作者本人授权
简单的物理电路
先来看一张初中学过的物理电路图:
从图中我们可以看出这是一个简单的串联和并联还有反相器的电路。[注:反相器没有按照标准来画]
图中的 a
和 b
代表着控制电路的开关,通过控制这两个开关的通电状态来控制灯泡的亮
与不亮
。
我们用数字 1
和 0
来表示开关的通电
和断电
的状态表示,1
表示通电
状态,0
表示断电
状态。同样的,我们也用数字 1
和 0
来表示灯泡亮
与不亮
的状态, 1
表示灯泡亮了
,0
表示灯泡不亮
。
那么通过我们学过的物理电路的知识,上图中三个电路,分别有以下三种控制结果:
以上三个表格分别表示就是对应了上图中三个电路通过对开关的控制,进而控制灯泡的亮与否。
别小看了这三个简单的电路控制结果的表格,因为这是现代计算机产生的物理基础。可以说,现代计算机的产生就是由这个演变而来的。一个复杂的 CPU
就是从这么简单的电路演变而来的。至于怎么演变来的,接下来该是英国数学家 乔治·布尔
和美国电子工程师 克劳德·艾尔伍德·香农
登场了。
乔治·布尔
乔治布尔这个数学家发明了两个概念:一个叫集合
,一个叫布尔逻辑
。咱们先来看下集合。有学过数学的都知道在集合中,有存在着三种操作,分别是:交集、并集、差集。如下图所示:
相信从上图中,有解开一部分程序员的疑惑,那就是我们在写代码的过程中,一直用到的 OR / AND / NOT
逻辑操作,到底是从哪里来的。其实我们用的就是这个伟大的数学家提出的这个集合的概念以及三种最基本的运算。从上图中可以看出,第一个就是 并集
的运算,第二个就是 交集
的集合运算,第三个就是 差集
的集合运算。而使用到的符号就是这个数学家发明的:[OR]或、[AND]与、[NOT]非
再来看下 布尔逻辑
。在布尔逻辑中,只使用两个值,一个是 0
,一个是 1
。讲这个布尔逻辑这么简单到底有啥用呢?再来看下一个叫 真值表
的东西,表格如下:
这三个表格到底在表达什么呢?可能细心的童鞋已经发现了。其实以上三个表格,就是实现了布尔逻辑中,0
和 1
之间的交集和并集的运算
那么再细心一点的童鞋又可能发现了。实际上,这三个表格的运算结果,跟上面的前三个电路控制结果的表格就是一样的
也就是说,物理跟数学这两个跨界的学科,找到一个相关联的计算方式。由此奠定了数学运算用物理电路的形式实现了
。这点很重要,因为这里数学跟物理有共通的地方,从而实现了让物理电路从此有了数学计算的能力。至于怎么计算的,克劳德·艾尔伍德·香农
出现了。这个伟大的电子工程师创造了 数字电路设计
这个学科
克劳德·艾尔伍德·香农
克劳德·艾尔伍德·香农
原本是在1932年进入到密歇根大学学习,在这个大学里首次接触到了 乔治·布尔
的理论,后来又进入到了麻省理工学院参与了 微分分析机
的研究工作。微分分析机
是一台机械式的计算机,不要小看这台机械式的计算机,这可是参与了很多重要工程,包括曼哈顿计划,就是造原子弹的,很多计算都是靠这种早期的计算器计算出来的。在这里不得不服咱们国家的科研人员,由于当时的技术封锁,咱们国家的科研人员硬是用算盘敲出的原子弹,真的是硬核到不行的操作。
讲了那么多,那么 克劳德·艾尔伍德·香农
具体的贡献是什么呢。通过上面的长篇讲解我们已经知道了一些东西:电子开关的通断电可以用 1
和 0
来表示;布尔逻辑也是 1
和 0
;电子开关的通断电控制灯泡的亮与否,跟真值表的计算结果是一样的;1
和 0
刚好是二进制。而香农的贡献就是,在原来是机械式的计算机上面,引入了电子控制的方式,可以用电子开关模拟布尔逻辑运算了
至于电路为什么能够实现运算,在这里就不进行其他的解释了。这已经进入到了另一个领域了,叫做《数字电路设计》
题外话
复杂的数学计算怎么通过物理电路实现:既然计算机能够实现简单的1位二进制的加法,那么怎么实现更加复杂的数学运算。这就要感谢数学家。数学家将复杂的数学运算简化到数学上的加法运算【咱们国家的原子弹制造就是将复杂的函数运算用算盘打出来的】。数学家运用各种数学工具,比如傅立叶变换、平方开方微积分等等,将数据的计算都换成了加法计算
也就是说,数学上复杂的运算可以通过各种数学工具简化到加法运算,那么就能通过对电路的设计来实现计算,这也就让计算机有了更加强大的计算能力。
总结:CPU是什么。本质上,CPU就是一堆复杂的电路。而为什么能够实现计算,通过对电路的设计来实现计算的
欢迎来我的博客逛一逛 杨建勇的个人博客http://yangjianyong.cn
CPU到底是什么东西?它为什么能够执行数学运算?的更多相关文章
- Java finally语句到底是在return之前还是之后执行(JVM字节码分析及内部体系结构)?
之前看了一篇关于"Java finally语句到底是在return之前还是之后执行?"这样的博客,看到兴致处,突然博客里的一个测试用例让我产生了疑惑. 测试用例如下: public ...
- 【转】Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过试验,至少有两种情况下final ...
- 关于RundownProtect到底是什么东西
RundownProtect这个字段相信只要是读过WRK源码的都会看过这个东西,这个字段在进程和线程的结构中都存在.最典型的例子就是对进程要进行什么操作的时候会先引用这个字段进行加保护,等操作结束后再 ...
- 不懂就问」CPU 到底是怎么识别代码的?
近读到这样一篇文章,从底层硬件角度出发剖析了一下CPU对代码的识别和读取,内容之精彩,读完感觉学到的很多东西瞬间联系起来了,分享给猿们. 首先要开始这个话题要先说一下半导体.啥叫半导体? 半导体其实就 ...
- JS事件处理函数中return false到底是什么东西
在<JS DOM编程艺术>一书中,用return false来阻止事件默认行为,可是js高程3里没有这种用法,那这到底是什么呢. 先看一下知乎的一个解释 就此问题,首先要纠正两个观点: 1 ...
- ESB企业服务总线到底是什么东西呢?
顾名思义,企业服务总线(ESB)就是一条企业架构的总线,所有的企业服务都挂接到该总线上对外公布,企业服务总线负责管理服务目录,解析服务请求者的请求方法.消息格式,并对服务提供者进行寻址,转发服务请求. ...
- php单元测试到底是什么东西呢?
前言: 真正写php代码也有3年时间了,勉强算是一个php程序员, 但是,心底却一直没有底气. 都说测试驱动开发,可我连程序开发中什么是单元测试?这种基本的程序员的素养都 还不是很清楚,痛定思痛,决定 ...
- 这个命令可以看到你的cpu到底集合
cat /proc/cpuinfo |grep processor|awk '{print $3}'|wc -l 改变虚拟机分辨率 xrandr -s 1024x768 -r 60 或 ...
- Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下fina ...
随机推荐
- Docker部署ELK之部署elasticsearch7.6.0(1)
1. 拉取elasticsearch7.6.0镜像: sudo docker pull elasticsearch:7.6.0 2. 输入命令,构建容器: sudo docker run --name ...
- 给 Arm 生态添把火,腾讯 Kona JDK Arm 架构优化实践
前言 Arm 架构以其兼具性能与功耗的特点,在智能终端以及嵌入式领域得到了广泛的使用,不断扩大其影响力.而在 PC 端以及数据中心,之前往往是 x86 架构在其中发挥着主要的作用.最近,随着人工智能. ...
- noip 模拟 7
我花了我多久的rp啊-- 考试经过 这次是三道题,依旧先看一遍,然后从头开始做 T1一看,这好像是KMP?等等,我好像忘了啊你个废,没事哈希也能做,On似乎可以呀,一波操作,我是不是要A题了? 转到T ...
- 一款优秀的国产性能测试工具kylinPET在麒麟操作系统上的能力表现
一直以来人们从事性能测试,使用最多的是Jmeter和LoadRuner .笔者在网上找了一下国产性能测试工具,从中筛选出一款优秀的国产的性能测试工具kylinPET.查找该款工具的历史,好像有十年历史 ...
- net start mongodb 提示:发生系统错误 5,拒绝访问。
问题: net start mongodb 提示:发生系统错误 5,拒绝访问. 无法启动mongodb 服务. 解决办法: 右键cmd,选择以管理员身份运行即可
- uwp 中的动画
xml --------------------------------------- <Page x:Class="MyApp.MainPage" xmlns=" ...
- 十五:JDBC学习入门
一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
- 页面的跳转MVVM,带参数的传递
主页面 -------------------------- <Page x:Class="CheckMemoryLeak.MainPage" xmlns="htt ...
- 设置Sublime插件快捷键--实现CSS颜色选取
安装插件ColorPicker 如果你经常要查看或设置颜色值,这个插件可以很方便地调用你本机的调色板应用.(译者扩充:)这是一个双向的功能,你既可以在调色板中选择一个颜色,然后按"确定&qu ...
- Javascript - Vue - vuex
vuex 这是一个与vue配套的公共数据管理工具,可以将一些需要共享的数据保存到vuex中,以此方便项目中的任何组件都可以从vuex中得到共享数据.cnpm i vuex -S 装包 读取数据 //在 ...