原标题:硬件和软件是如何结合的?代码如何控制机器?
我们不妨从最底层开始往上走。
1. 二进制理论
众所周知,电脑,手机以及其他大量的电子设备,都是基于复杂的数字电路进行工作的。而数字电路则通过循环往复地完成一系列的指令,来输出我们想要的结果。
那究竟里面的工作原理是什么样子的呢?
首先,我们需要一套数字理论。
上帝说,我们需要一个理论。于是莱布尼茨诞生了。
莱布尼茨提出了二进制,这成为了现代计算机理论的基础。至于是老子启发了他,还是他自己坐而悟道想出了二进制,其实已经不重要了。有了二进制,一切变得简单起来:
我们可以只用1 和0 来代表所有数字,进行和十进制一样的代数运算。虽然对于人脑来说,二进制非常不雅观, 比如:
10001010101010101010 * 0101001101010 = 0101101001000001010011100110100。
但它对于计算机来说, 则最简洁,最直观,最高效。
1.1 二进制运算
每一位都只可能是1或者0,运算符号也就是加减乘除。虽然长,位数多,但速度极快!因为,但就每一位来说,运算之后,只会有几种情况:1 + 1 -> 0, 进一位(, 这个)1 + 0 -> 1.0 + 1 -> 1.0 + 0 -> 0.
所以说,《三体》中,刘慈欣讲到人肉计算机一说。单个运算单元只需要记住特定指令相对应的操作即可,甚至连加减乘除都不需要会。 但这个在现实里面并不可能完成。假设这个运算恒纪元的程序有10000条指令(但显然这个条件都不成立,因为这个程序必然很复杂,涉及复杂的浮点运算和逻辑算法,甚至还有平方开放积分微分,10000条机器代码都不够塞牙缝的), 每条指令需要100个逻辑单元,每个单元的运算时间1秒钟,那么整个程序就需要1000000s (11天13小时46分钟)。。。所以可能程序还没算完,乱纪元又来了,所有人来不及脱水都死了。这还不算发盒饭,上厕所时间。
1.2 二进制逻辑
而且,电脑可以理解是非对错了。计算机以1表示“对”,“是”,“正确”。以0表示“错”,‘否’,‘错误’。然后又引进了“或”,‘与’,‘否定’,等逻辑语句。
我们用 || 表示“或”,表示两者有一个成立即成立(我是学工科的(1) || 我是学计算机的(0) = 我没有女朋友(1))。0 || 0 = 0 0 || 1 = 1 1 || 0 = 1 1 || 1 = 1
我们用&& 表示“与”,表示两者都成立方可成立。(我是学工科的(1)&& 我是男的(1) = 我没有女朋友(1))。0 && 0 = 0 0 && 1 = 0 1 && 0 = 0 1 && 1 = 1
2. 数字电路的实现
2.1. 逻辑门
我们有了数字理论,那怎么才能做出逻辑电路呢?怎么才能用来运算呢?我们引入这些理想的逻辑门,靠他们来作运算。
这个就是与门,除非两个输入都是1,则输出1, 否则输出0.
这个就是或门,除非两个输入都是0,则输出0,否则输出1.