前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最强大脑,计算机中1+1=2的实现逻辑

最强大脑,计算机中1+1=2的实现逻辑

作者头像
腾讯技术工程官方号
发布2018-01-30 14:35:23
3.3K3
发布2018-01-30 14:35:23
举报

在计算机硬件层面上,你知道1+1是如何实现的吗?本文先介绍了继电器的基本原理,然后从分析与或非等逻辑门电路入手,推导出异或门的实现,借助异或门从而实现1+1,并得出全加器的基本原理。

前言

计算机中处理的都是二进制,1+1=2转成二进制表示为 1 + 1 = 10, 10表示相加结果为0, 并且有进位。如图所示,该运算可以拆分成求和和求进位。

求和的特点是0 + 0 = 0, 1 + 1 = 0, 0 + 1 = 1, 1 + 0 = 1. 可以看到,相同的数相加为0, 相反为1, 其实就是作异或。

求进位的特点是 0 + 0 = 0, 1 + 1 = 1, 0 + 1 = 0, 1 + 0 = 0,就是有0的话,结果就为0, 其实就是作与。

所以,该加法运算就可以拆分成一个异或运算和一个与运算。那么异或和与运算又是如何实现的呢?下面我们先从最简单的讲起。

0.接地

下图大家都很熟悉,一个电池接上一个灯泡,合上开关后,灯泡就亮了。它的基本原理是电子从电池的负极进过灯泡后到达正极,和正极的质子结合达到稳定状态。灯泡中有个金属片和钨丝,电子进过灯泡的金属片后,由于有电阻所以会发热,如果达到了钨丝的燃点后,钨丝在真空就会发亮。

上图有个问题就是如果电池和灯泡相距很远的话(比如广州到北京), 铺线的成本很高,来回都要一根线,有没有什么更节约成本的方法呢?肯定有, 我们知道地球本身就是一个巨大的导体,里面有无穷无尽的电子,灯泡可以直接接地,从地球上吸收电子,而电池将负极的电子接入到地球。这样的话,可以节约一半的铺线成本,如下图所示。

此处灯泡和电池接地是个示意图,只是为了说明这么个原理。真正这样做的话,灯泡肯定不亮,因为电池的电压相对地球来说太小了,地球的电阻相对电池来说太大了。

工程实践上,将上图简化为下图的方式来表示,将接地的电池用V来表示。

1.继电器

如果要长距离的传输,由于长导线的电阻越大,电流越小,功率就越小,为了使得灯泡一样亮,就需要增加电压。但是导线的长度可以近似无限增大,但是电压没法无限增大,所以需要一套中继系统,通过这套系统将比较弱的输入电流“放大”成较强的输出电流。这套中继系统就叫继电器。它的结构如下。

电流通过缠绕在铁棒的导线,会产生磁场。继而将上面的那个开关拉下来,从而接通该电路。以前的电报就是类似的原理,如下图所示,发送方按下开关,铁棒那里产生磁场,将另外一个开关合上,从而收端将电磁铁上面的活动杆拉下; 发送端松下开关,活动杆就弹回去了,从而能够听到“滴-答”的声音。“滴-答”声的长短代表了不同的含义,从而用来传递各种信息。

2. 与门

什么是门?继电器的组合就叫门,多个继电器可以并联或串联在电路中以执行各种基本功能。 将各种门组合起来可以实现复杂的功能。

将两个继电器串联起来叫与门。如下图所示,红色表示通电。只有当两个继电器都通电后,灯泡才亮,其它三种情况灯泡都不亮。当然,继电器的可以再接继电器、各种门,不一定是灯泡。

电气工程师用下图来表示一个与门。可以把按下开关当作1,断开开关为0。只有当两个输入都为1时,输出才为1,其它情况均为0。 同编程语言中的与(&)操作。 0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。

输入和输出的关系可以用下表来表示。

3.或门

当两个继电器并联在一起时称为或门。这种情况下,只要有一个继电器通电,灯泡就亮。只有当两个继电器同时断开时,灯泡才不亮。

可以用以下符号来表示或门。同编程语言中的或(|)操作符。 0 | 0 = 0, 0 | 1= 1, 1 | 0 = 1, 1 | 1 = 1。

或门的输入和输出的关系可以用下表表示。

4. 反向器

反向器就是将高电平转为低电平。断开开关时,灯泡亮。闭上开关时,灯泡反而不亮。反向器通常不会叫做一个门,主要是门通常是由两个或多个继电器组合而成的, 而反向器只需要一个继电器。

反向器用以下符号来表示。类似于编程语言中的取反操作符。 ~0 = 1, ~1 = 0.

5.与非门

与非门就是两个反向器并联在一起。只有当两个反向器都合上开关时,灯泡才不亮。刚好和与门相反。

用以下符号来表示一个与非门。在与门的基础上加上一个小圆圈,表示在与门结果上取反。

与非门的输入和输出之间的关系入下表, 只有当两个输入端为高电平(合上开关)时,输出才为低电平。

6. 或非门

两个反向器串联在一起称为或非门。只有当两个反向器的开关都打开时,灯泡才亮,刚好和或门完全相反。和与非门的区别是第2,3种情况,打开任意一个反向器,或非门不亮,而与非门亮。

用以下符号来表示或非门, 在或门的基础上加上个小圆圈,表示在或门的结果上取反。

或非门的输入和输出的关系如下。只有当两个输入端都是低电平(断开开关)时候,输出才为高电平。

7.异或门

异或门是如何实现的呢?异或门可以通过一个或门和一个与非门来实现。如下图所示,或的结果和与非的结果再作与后,得到的就是异或的结果。两个输入端,相同为0,相反为1.

或门和与非门通过一个与门连接起来就是异或门。各个继电器的连接关系入下图。与门、或门、与非门、或非门各需要两个继电器,一个异或门需要6个继电器。

异或门用下图来表示,在或门的基础上增加一根曲线。

异或门的输入和输出的关系入下表,用XOR表示异或, 输入相同为0, 相反为1。 同编程语言中的异或(^)操作符。0 ^ 0 = 0, 1 ^ 1 = 0, 1^0 = 1, 0 ^ 1= 1.

8. 1+1= 2?

分析完与门和异或门后,现在再回过头来看下开头说到的如何实现1 + 1 =2 的功能。一位的加法就相当于一个异或门求和, 一个与门求进位。如下图所示。

该电路图用以下这种较简单的方式来表示,该符号表示为半加器,原因是因为它没有将之前的进位加上。

通过半加器可以处理1 + 1 = 2 的运算,但是如果操作数位数大于1位,则还需要能够处理进位的功能。

为了能够处理之前的进位,在半加器的基础上改进下,通过两个半加器和一个或门组合起来就可以组成一个全加器(FA)。一个半加器需要8个继电器, 一个全加器需要18个继电器来实现。如下图所示。

全加器用以下符号表示, Carry In (CI)表示低位的进位,Carry Out (CO)表示当前位的进位。如果是最低位相加,则CI位设置为0,表示没有进位。

如果要实现两个8位数的相加,则需要8个全加器(总共需要144个继电器),通过下图所示的方式连接起来。低位的CO接到高位的CI上,A,B分别表示两个操作数。

下图是对上图的简化描述,表示一个8位的加法器, 其中A7...A0表示操作数A的二进制表示中的第0位到第7位,B表示另外一个操作数, S表示A和B相加后的结果。

如果要实现一个16位的加法器,只需要将两个8位的加法器串联起来即可。第一个8位加法器的CO接入到第二个8位加法器的CI位。如下图所示。

结语

现在的计算机真的是像现在这样实现加法的吗?原理类似,但是有两方面的改进。

一个是运算效率方面的提升,从上面看到的8位全加器,都是需要等待低位运算完后,高位再将低位的进位拿来参与运算,这样运算的速度就取决于操作数的位数,如果位数较多的话,速度会比较慢,这种实现方法叫作行波进位。目前计算中普遍采用的是前置进位,该方法可以提高运算速度。

另外一个是制作工艺的改进,继电器用在上世纪四五十年代的数字计算机中,现在的计算机都是用晶体管。晶体管相对继电器的优势是体积小、速度快、能耗低、噪声小、而且还更便宜。如果搭建一个8位全加器,也需要用到144个晶体管(如果采用前置进位,则需要更多的晶体管),但是体积小很多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯技术工程官方号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 0.接地
  • 1.继电器
  • 2. 与门
  • 3.或门
  • 4. 反向器
  • 5.与非门
  • 6. 或非门
  • 7.异或门
  • 8. 1+1= 2?
  • 结语
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档