中央处理器( central processing unit ,简称 CPU )是现代计算机的核心设备,负责执行计算机指令,并处理相关软件数据。处理数据时需要执行数学运算,这由内部的 算术逻辑单元 ( arithmetic logic unit )负责,简称 ALU 。
顾名思义,CPU 的算术逻辑单元需要执行两种最基本的运算:
- 算术运算,即对二进制整数执行加减乘除等算术运算;
- 逻辑运算,即对二进制位执行按位逻辑运算;
逻辑运算指的是 布尔逻辑运算 ,它非常简单,也是实现其他数学运算的基础。本节便先拿布尔运算抛砖引玉,探索用电路实现运算的方法。
布尔逻辑
布尔逻辑是由英国科学家 乔治布尔 定义的逻辑代数系统,在电子学、计算机硬件和软件中应用非常广泛。逻辑学中只有 真( true ) 和 假( false )两种值,基于这两种逻辑值的运算便是逻辑运算,包括 与 、或 、非 等等。
我们先来看 与( AND )运算,是一种针对两个逻辑值的运算,表示同时成立:当且仅当两个变量的值都是真时,结果才为真。AND 运算的真值表如下:
AND | False | True |
---|---|---|
False | False | False |
True | False | True |
在计算机系统中,通常以二进制位表示真假,其中 0 表示假,1 表示真。AND 运算则演变为 按位与运算 ,操作符为 &
,对应的真值表如下:
AND | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
或( OR )运算也是一种二元运算,表示有一个成立:当两个变量的值有一个为真时,结果便为真。OR 运算的真值表如下:
OR | False | True |
---|---|---|
False | False | True |
True | True | True |
跟 OR 运算对应的位运算是 按位或 ,操作符为 |
,真值表如下:
OR | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 1 |
跟 AND 和 OR 不同,非( NOT )是一种一元运算。它只针对一个逻辑值进行运算,表示取反:当变量为真时,结果为假;当变量为假时,结果为真。NOT 运算的真值表如下:
NOT | - |
---|---|
False | True |
True | False |
跟 NOT 运算对应的位运算是 按位取反 ,操作符为 ~
,真值表如下:
NOT | - |
---|---|
0 | 1 |
1 | 0 |
那么,如何通过电路来实现这些逻辑运算呢?
与运算
如果您学过初中物理,应该对串、并联电路不会陌生。如下图,将两个开关串联起到什么效果呢?
在开关串联电路中,只有两个开关同时闭合,电路才能连通。同时闭合,即同时满足闭合这个条件,是一种典型的 AND 逻辑运算。因此,我们可以利用串联开关来实现 AND 运算。
回到上图,我们以开关闭合为 1, 断开为 0 ;电灯泡亮为 1 ,不亮为 0 。由此,我们得到一个 AND 运算电路,以两个开关作为输入,以一个电灯泡作为输出。
或运算
同样,您应该能够想到通过并联两个开关来实现 OR 运算:
在开关并联电路中,只要有一个开关闭合,电路就能连通。由此,我们得到一个 OR 运算电路,只要有一个输入为 1 ,输出结果就为 1 ;否则输出就为 0 。
非运算
我们通过简单的开关电路,实现了逻辑 AND 和 OR 运算的逻辑。那么,NOT 运算又该如何实现呢?
同样,通过初中物理知识,不难想到 短路 :正常工作的电灯泡,只要两端用导线连起来,就会形成短路。这时,电灯泡不再有电流通过,因而熄灭。
下面这个电路在电灯泡两端连接一个开关,开关闭合就形成短路:
在开关断开的情况下,电灯泡是亮的;开关一闭合,电灯泡就熄灭。如果我们以开关闭合为 1 ,断开为 0 ;灯泡亮为 1 ,不亮为 0 ;那么,输入跟输出刚好相反,由此得到 NOT 运算电路!
电路中的电阻起到保护作用,避免开关闭合短路时电路因电路过大而烧坏。
总结
本节,我们利用了电路中的串联、并联和短路原理,实现了 AND 、OR 、NOT 逻辑的运算电路。这些电路虽然还比较简单,用途却不小,也为我们下一步的研究打下了良好的基础。
由于开关需要手工控制,一个运算的结果输出无法直接作为下一运算的输入,使用起来不是很灵活。下节开始考察电磁继电器,即利用电磁铁实现的电控开关。在此基础上,继续学习利用继电器构建更灵活 逻辑门 的方法。
【小菜自制计算机】系列文章首发于公众号【小菜学编程】,敬请关注: