迷惑 1 + 1 = 2 是小学生都知道的公理,这很好理解,也不需过于复杂化。但一个问题需要深入探究:计算机是如何实现 1 + 1 = 2 的。
从二进制开始说起 计算机,更准确来说是 CPU, 它天生是不可能知道 1+1=2 这种计算逻辑的,一定是人为赋予的。
人是怎么告诉 CPU 这种事的呢?准确来说,这是CPU设计只出就定死的。
首先考虑CPU内部的实现,大家或许都有一个意识:“计算机只认识0和1”,准确来讲,这里的0和1并不是单纯整数意义上的数字0和数字1, 而是指两种状态. 思考一个灯泡,它只能存在两种状态,没开/开着,这是两种状态。同样,在CPU内部的电路中,也只有两种状态(当然还存在高阻态,但这并不是重点),这两种状态分别为A态(通,高压态)、B态(断,低压态),分别用1/0两个数字标表示,因此,更准确的表达是“计算机只认识0和1两种状态“。
两种状态可以由二进制表示,二进制与常用的十进制类似,最大的不同点是逢二进一,例如十进制2的二进制为10,数字7的二进制是111. 这种表示简单且高效,在计算机内部,所有的数据都是二进制存储的,不仅数值,字符也是如此。当然,不同于数值之间的转换,并不存在单纯的字符与二进制之间的转换关系,这需要人为的定义,世界上通用的字符的二进制表示是ASCII码,例如字母'A', 其二进制被强制定义为01000001.
有了二进制的概念,对于问题:“计算机是如何实现 1 + 1 = 2”,也就迈出了一大步。首选可以明确,在计算机内部数字'1','2' 被分别表示为 '01','10'.
逻辑电路 现在要解决的问题的是:计算机如何处理运算。 由于计算机内部由二进制表示,问题由回到二进制上,最先要解决的问题是二进制是如何进行四则运算的? 考虑一位二进制数字,有以下规则:0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 0进1(即10)。我们要实现一种满足以上规则的电路。 串并联等基础概念不再赘述,这里首先介绍几种基本逻辑电路:
或门:并联电路实现; 记为'OR', 其运算逻辑为:0 OR 0 = 0, 0 OR 1 = 1, 1 OR 0 = 1, 1 OR 1 = 1. 与门:串联电路实现; 记为'AND', 其运算逻辑为:0 AND 0 = 0, 0 AND 1 = 0, 1 AND 0 = 0, 1 AND 1 = 1. 非门:通常采用CMOS逻辑和TTL逻辑,也可以通过NMOS逻辑、PMOS逻辑等来实现。记为'NOT', 其运算逻辑为:NOT 0 = 1, NOT 1 = 0. 与非门:一个与门与一个非门实现。 异或门:用一个与非门、一个与门和一个或门实现。记为'XOR', 其运算逻辑为:0 XOR 0 = 0, 0 XOR 1 = 1, 1 XOR 0 = 1, 1 XOR 1 = 0.图片 计算机内部 1 + 1 = 2 的实现 有了以上逻辑电路的概念,1 + 1 = 2( 二进制下1 + 1 = 0进1)实现便十分简单,利用上述介绍的二进制加法与逻辑电路的运算逻辑,我们可以分成两部分完成:和输出;进位输出。 和输出可以采取异或门, 1 XOR 1 = 0. 扩展:异或门又称为半加器,它只能实现和输出但无法输出进位。 进位输出可以采取与门, 1 AND 1 = 1. 扩展:异或门加上一个与门组成全加器。
a,b 为输入端, c为进位输出,s为和输出。