时长:
14分钟
播放:
15
发布:
6天前
主播...
简介...
你有没有想过,我们每天用的电脑,其实在做一件非常神奇的事,那就是用电流去思考逻辑。这就很奇怪啊,电流没有大脑,它不懂数学,不会理解,它只是一个物理过程,为什么它能执行逻辑、能做运算呢?
如果你理解了这个问题,你就会意识到一个非常震撼的事实:那就是人类的思维结构、数学的逻辑结构、物理世界的结构,竟然是同一种结构,它们是可以相互转换的。
那计算机是如何用电流来进行计算的呢?
首先第一步,要把人类的思维先转化成可计算的数学逻辑;第二步再把数学逻辑转化成电流;第三步让电流学会运算,让它看起来像是可以思考一样。
那我们先来看第一步,把思维转化成数学逻辑,人类的思维听起来是非常抽象的,也是很发散的,它跟数学又有什么关系呢?
我们每天会讲很多话,有一些话是天然带有可以被计算的特征的,而有一些没有。
比如我问你今天会下雨吗?这是一个疑问句,它没有任何推理,也不具备可以计算的逻辑结构。
又比如我说,啊!今天雨好大啊!这是个感叹句,它的功能是抒发情绪,同样也不具备可以被计算的逻辑结构。
但是我说:如果今天小雨,我就带伞。这句话就具有可以被计算的特征。
它的特征是:用条件推导出了结果。像这种句子,它就能直接翻译成计算机的语言。
当然,逻辑学家是不关心下雨,也不关心伞的,他们只关心这句话的结构。
所以我们把这句话的“下雨“替换成 A,”带伞“替换成B,这句话的结构就是如果A,那么推导出 B。
在逻辑上,这句话可以用 A 箭头 B 来表示:
A→B.
但重点来了,这种推导关系其实并不是逻辑中最基础的东西,它只是一种结构而已, 真正构成这个结构的最小单元是A 和 B 这两个条件,推导只是把A 和 B 连接起来的一种关系形式。
如果要让这条结构变得可以被计算,有一个非常重要的前提,那就是:A 和 B 必须能够判断真假。
比如“今天在下雨”这句话,你只要推开窗户就能判断它是真的还是假的。“我有没有带伞”这个行为,你只要看看自己的手就能验证真假了。
只有当 A 和 B 都能判断真假的时候,整个 A → B 的逻辑结构才具备“可计算性”。
那为什么计算一定要能判断真假呢?
因为每一次计算,本质上都是在做选择,就像你在路口要判断走左边还是走右边,看到红灯,你要判断走还是停,你滑手机的时候,也在判断要不要继续看。
有判断,你才能选择下一个行动路径是什么,没有判断,就没有下一步。
你想一想,你自己在做每一个行动的背后,是不是都包含着一次判断?而判断的本质就是二选一。
比如是或否、成立或者不成立、做或者不做等等,逻辑学家做了一件非常天才的事情,他们把所有的判断全部统一抽象成了两个符号:真或假。
这个时候就要进入下一个阶段:
不仅 A 和 B 要能判断真假,A→ B这个逻辑结构,也要能够判断真假,只有这样,计算机才能判断这条指令到底成不成立,如果成立,它就走下一步,如果不成立,它要走另一条分支。
那还是这句话,“如果今天下雨,我就带伞”,该怎么判断真假呢?
要回答这个问题,我们必须把现实中所有可能发生的情况,都列举出来,一共有四种情况。
第一种情况,下雨了,并且我带伞了。这种情况在数学上写成A∧B,它表明A 和 B 这两个条件同时成立,在这个时候,“如果下雨就带伞”的逻辑就是真的。
第二种情况,下雨了,但我没有带伞,在数学上写成 A∧¬B。非B表示B 的反面的意思,在这何种情况下,雨下了,但带伞的动作没有执行,所以逻辑是假的。
第三种情况,没有下雨,我带伞了,在数学上写成 ¬A∧B,非 A 表示 A 的反面的意思,由于下雨的前提就没有发生,所以没有打破逻辑,逻辑依然是真的。
第四种情况,没有下雨,你也没有带伞,在数学上写成¬A∧¬B。同样,由于在原逻辑里没有设定不下雨的情况,所以这条也没有打破承诺,逻辑依然是真的。
[图片]
现在所有情况都贴上了真假的标签,但是,真和假是语言,计算机是没有办法理解的,于是数学家又做了进一步的抽象,把真替换成了数字 1,把假替换成了数字 0。
于是,整个逻辑世界就变成了数学世界,刚才的那四情况也有了更完整的数学表达。
[图片]
到这一步,你就会发现,语言、逻辑、数学都就连上了。
好了,更加神奇的地方来了,我们可以再进一步推理这句话。
“如果下雨,我就带伞” 这句话的意思其实完全等价于 “要么不下雨,要么我带伞”。 你可以慢慢地想一想,是不是这么回事?
这两句话的等价关系,在数学上,就可以写成这样:
A→B≡¬A∨B
这里面的“或”∨ ,表示 A 和 B 其中至少有一个成立。
再进一步,我们还可以推导出下面这个结论:“今天下雨,而且我带伞了”其实等价于“ 不是( 不下雨 或者 不带伞)。
这句话听起来有点绕,你可以仔细想一想,是不是这样?
这句话里的“而且” 对应着数学上的与∧,这句话里的不 对应着数学上的非¬,这里话里的 或者 对应着数学上的 或 ∨。
那么,上面一整句话的数学逻辑就可以写成这样:
A∧B=¬(¬A∨¬B),是不是很神奇。
到这里你会发现,这句普普通通日常语言,无论怎么变化,都可以拆分成 与 或 非这三个最基础的逻辑操作。
不仅如此,逻辑学家还发现,不光是这一句,而是“所有”的逻辑语言,不管多复杂,都可以用与 或 非 拼凑出来,它们就像色彩里面有三原色,红绿蓝可以混合成所有颜色,与或非可也以汇合出所有逻辑,不信你自己可以试一试。
[图片]
所以在这里,我就可以下一个定义:
所有可以被计算的逻辑 = 与、或、非 的无限组合。
与或非这三样东西,再加上 0 和1,这就是计算机能听懂的唯一语言。
这其实就是计算机的核心数学基础布尔代数,它是由数学家乔治布尔发明的。他第一次把可以计算的逻辑和数学系统性地统一了起来。
[图片]
讲到这里,我们的思维,已经被抽象成了数学逻辑,接下来就要用电流来执行这个逻辑了。怎么执行呢?
有一个科学家叫做克劳德香农,他提供了非常天才的构想。
[图片]
他认为呢,计算机做的所有操作,本质上只有两件事:通电和断电。
这两个操作正好能够对应逻辑学里的真和假,以及 数学上的 1和 0。所以通电代表 1,断电代表 0。
通电 = 真=1
断电 = 假=0
那与或非该怎么表示呢?
现在,你来想象一下,如果我们把两个开关串联,只有当两个开关都打开的时候,电才能通过,这就是 与门,它代表的是“同时成立”。
[图片]
如果我们把两个开关并联,只要其中有一个通电,电流就能通过,这就是 或门。它代表“至少有一个成立”。
[图片]
而非门,就是一个反向执行的开关,就像有一个灯泡,本来你按下它的开关,它应该就会亮,松开开关灯就会灭,但反向开关是反着来的,当你按下开关时,灯灭掉,当你松开开关时,灯反而会亮起来。它输出的结果永远跟输入的相反,这就是非门。
[图片]
这些开关就是芯片里面的一个个晶体管,晶体管的串联、并联、反向组合,就是计算机的逻辑门,成千上万个逻辑门的排列组合,就是计算机的电路。
当然,有了与门、或门、非门,是不够的,还得让它们进行运算。
那该如何运算呢?
我们先来看一下最简单的计算,1+1 等于几。
我们都知道,在十进制里面1+1=2,但是计算机是二进制的,那么,在计算机里1 + 1 = 10,这个 “10” 其实包含两层意思:
右边的这一位(0),叫做结果位,它是当前这一位确定下来的结果。
左边的这一位(1),叫进位,它是当前这一位“溢出”后要传递到下一位的信号。
就像你在装箱子,如果是十进制的,那每个箱子可以装 0-9 个球,第十个球的时候就要溢出传递给左边的箱子,结果位变成0,进位变成 1。
但由于这里是二进制的,每个箱子最多只能装一个球,如果有两个球,就会溢出来,要把多出来的球交给左边的箱子,结果位变成0,进位变成 1。
[图片]
而且计算机只认得 0 和1,与或非,所以,运算的前提,就是把复杂的文字和数学,全部变成最简单的0和 1 、与或非。
1+1 其实就是 两个 1 的信号,彼此相加。
加法在计算机里也是不存在的,它必须得置换成逻辑门,置换以后,加法其实等于:异或(XOR) + 与(AND)的叠加操作。
加法=异或(XOR)+与(AND)
也就是两个信号要同时通过“与门”和“异或门”。
与门很好理解,当两个条件同时成立的时候,也就是当两个信号都为 1 的时候,输出就是 1。
你可以想象这样一个场景, 一个信号控制一个开关,另一个信号控制另一个开关,这两个信号通过控制电压的方式,来决定自己的这个开关是否打开,由于这两个开关是串联的,只有当它们同时都打开,电路才导通,信号输出为 1。
[图片]
在加法器里,这个信号决定了进位的数值,也就溢出的部分。
你想想啊,0+0 不需要进位,0+1 也不需要进位,1+0 也不需要,只有 1+1 的时候才需要进位,恰恰是两个信号都为 1 的时候才进位,所以与门的规则就是进位的规则,与门就是进位检测器。
[图片]
异或门稍微复杂一点,它是一个复合门,是被基本门组合而成的,它的意思是:如果两个信号不同,输出为1 ,如果两个信号相同,输出为 0。
你可以把它理解成一个“翻转逻辑”:当它接收到两个信号,一个亮、一个灭 → 输出亮; 当两个信号都亮的时候 → 输出灭。
[图片]
异或门决定了结果位,为什么呢?
因为在数学里,如果是 0+0,结果位是 0;如果是0+1 或者 1+0,结果位是 1;如果是 1+1,因为两个挤不下,会发生进位,于是结果位剩下0。
你看啊,只有当两个数字不一样的时候,结果为才是 1,所以二进制加法的结果位的规则恰好跟异或门的规则是一模一样。
那我们来看 1+1 的计算过程。
你想象一下,有两个都是 1 的信号,要通过异或门和与门这两个电路, 由于结果位的数值由异或门的规则决定,两个相同的信号,输出是 0。
进位由与门的规则决定,两个都是1 的信号,输出是 1,那么把这两条电信号拼在一起,得出的结果是 10,换算成二进制,就等于 2。
[图片]
这是计算机里做最简单的算法。
那更复杂的计算呢?比如乘法、除法、甚至处理文字、处理图片、又怎么来的。
我们见到的所有信息,其实都可以编码成0 和 1。
比如图片,它其实就是一张巨大的表格:每个格子就是一个像素,每个像素都可以编码成一个数字。 整张图就是 0 和 1 的数字矩阵。
[图片]
[图片]
比如字母,就拿A来说,你可以把它编码成数字65,65 的二进制写法是01000001,这就是 A 在计算机里的表示。
A=65=01000001
又比如声音,它是机械波,有震动的频率和振幅,就可以测量出这些振幅的大小,并且用数字来记录,再把数字转成 二进制写法,变成 0 和 1,这样就可以用计算机处理了。
[图片]
包括乘法除法,或者更复杂的运算,本质上跟加法一样,都是不同逻辑门的排列组合,就像乐高积木,再怎么复杂,都是由一块块小积木搭建起来的。
所以你看,我们从“如果下雨我就带伞”的这句话,推导出了整个计算机的运算逻辑。
当你理解了整个过程以后,你会发现,人类的思维、数学、物理,本就是同一个东西的不同表现形式。计算机也是人类思维的一种映射。
所以爱因斯坦有一句名言:这个世界最不可理解的地方,就是它竟然是可以被理解的。
就好像万事万物存在一个源代码,共享着同一个结构。这个结构太精妙了,太简约了,以至于我做科普的时候经常都会感叹,宇宙的法则真厉害。
这期我讲了计算机是如何让电流来执行逻辑的,但要让它有秩序的思考,还需要有非常天才的架构,下一期我讲讲计算机的架构和配置,来感受一下逻辑的计算是如何在机器中展开的。
如果你理解了这个问题,你就会意识到一个非常震撼的事实:那就是人类的思维结构、数学的逻辑结构、物理世界的结构,竟然是同一种结构,它们是可以相互转换的。
那计算机是如何用电流来进行计算的呢?
首先第一步,要把人类的思维先转化成可计算的数学逻辑;第二步再把数学逻辑转化成电流;第三步让电流学会运算,让它看起来像是可以思考一样。
那我们先来看第一步,把思维转化成数学逻辑,人类的思维听起来是非常抽象的,也是很发散的,它跟数学又有什么关系呢?
我们每天会讲很多话,有一些话是天然带有可以被计算的特征的,而有一些没有。
比如我问你今天会下雨吗?这是一个疑问句,它没有任何推理,也不具备可以计算的逻辑结构。
又比如我说,啊!今天雨好大啊!这是个感叹句,它的功能是抒发情绪,同样也不具备可以被计算的逻辑结构。
但是我说:如果今天小雨,我就带伞。这句话就具有可以被计算的特征。
它的特征是:用条件推导出了结果。像这种句子,它就能直接翻译成计算机的语言。
当然,逻辑学家是不关心下雨,也不关心伞的,他们只关心这句话的结构。
所以我们把这句话的“下雨“替换成 A,”带伞“替换成B,这句话的结构就是如果A,那么推导出 B。
在逻辑上,这句话可以用 A 箭头 B 来表示:
A→B.
但重点来了,这种推导关系其实并不是逻辑中最基础的东西,它只是一种结构而已, 真正构成这个结构的最小单元是A 和 B 这两个条件,推导只是把A 和 B 连接起来的一种关系形式。
如果要让这条结构变得可以被计算,有一个非常重要的前提,那就是:A 和 B 必须能够判断真假。
比如“今天在下雨”这句话,你只要推开窗户就能判断它是真的还是假的。“我有没有带伞”这个行为,你只要看看自己的手就能验证真假了。
只有当 A 和 B 都能判断真假的时候,整个 A → B 的逻辑结构才具备“可计算性”。
那为什么计算一定要能判断真假呢?
因为每一次计算,本质上都是在做选择,就像你在路口要判断走左边还是走右边,看到红灯,你要判断走还是停,你滑手机的时候,也在判断要不要继续看。
有判断,你才能选择下一个行动路径是什么,没有判断,就没有下一步。
你想一想,你自己在做每一个行动的背后,是不是都包含着一次判断?而判断的本质就是二选一。
比如是或否、成立或者不成立、做或者不做等等,逻辑学家做了一件非常天才的事情,他们把所有的判断全部统一抽象成了两个符号:真或假。
这个时候就要进入下一个阶段:
不仅 A 和 B 要能判断真假,A→ B这个逻辑结构,也要能够判断真假,只有这样,计算机才能判断这条指令到底成不成立,如果成立,它就走下一步,如果不成立,它要走另一条分支。
那还是这句话,“如果今天下雨,我就带伞”,该怎么判断真假呢?
要回答这个问题,我们必须把现实中所有可能发生的情况,都列举出来,一共有四种情况。
第一种情况,下雨了,并且我带伞了。这种情况在数学上写成A∧B,它表明A 和 B 这两个条件同时成立,在这个时候,“如果下雨就带伞”的逻辑就是真的。
第二种情况,下雨了,但我没有带伞,在数学上写成 A∧¬B。非B表示B 的反面的意思,在这何种情况下,雨下了,但带伞的动作没有执行,所以逻辑是假的。
第三种情况,没有下雨,我带伞了,在数学上写成 ¬A∧B,非 A 表示 A 的反面的意思,由于下雨的前提就没有发生,所以没有打破逻辑,逻辑依然是真的。
第四种情况,没有下雨,你也没有带伞,在数学上写成¬A∧¬B。同样,由于在原逻辑里没有设定不下雨的情况,所以这条也没有打破承诺,逻辑依然是真的。
[图片]
现在所有情况都贴上了真假的标签,但是,真和假是语言,计算机是没有办法理解的,于是数学家又做了进一步的抽象,把真替换成了数字 1,把假替换成了数字 0。
于是,整个逻辑世界就变成了数学世界,刚才的那四情况也有了更完整的数学表达。
[图片]
到这一步,你就会发现,语言、逻辑、数学都就连上了。
好了,更加神奇的地方来了,我们可以再进一步推理这句话。
“如果下雨,我就带伞” 这句话的意思其实完全等价于 “要么不下雨,要么我带伞”。 你可以慢慢地想一想,是不是这么回事?
这两句话的等价关系,在数学上,就可以写成这样:
A→B≡¬A∨B
这里面的“或”∨ ,表示 A 和 B 其中至少有一个成立。
再进一步,我们还可以推导出下面这个结论:“今天下雨,而且我带伞了”其实等价于“ 不是( 不下雨 或者 不带伞)。
这句话听起来有点绕,你可以仔细想一想,是不是这样?
这句话里的“而且” 对应着数学上的与∧,这句话里的不 对应着数学上的非¬,这里话里的 或者 对应着数学上的 或 ∨。
那么,上面一整句话的数学逻辑就可以写成这样:
A∧B=¬(¬A∨¬B),是不是很神奇。
到这里你会发现,这句普普通通日常语言,无论怎么变化,都可以拆分成 与 或 非这三个最基础的逻辑操作。
不仅如此,逻辑学家还发现,不光是这一句,而是“所有”的逻辑语言,不管多复杂,都可以用与 或 非 拼凑出来,它们就像色彩里面有三原色,红绿蓝可以混合成所有颜色,与或非可也以汇合出所有逻辑,不信你自己可以试一试。
[图片]
所以在这里,我就可以下一个定义:
所有可以被计算的逻辑 = 与、或、非 的无限组合。
与或非这三样东西,再加上 0 和1,这就是计算机能听懂的唯一语言。
这其实就是计算机的核心数学基础布尔代数,它是由数学家乔治布尔发明的。他第一次把可以计算的逻辑和数学系统性地统一了起来。
[图片]
讲到这里,我们的思维,已经被抽象成了数学逻辑,接下来就要用电流来执行这个逻辑了。怎么执行呢?
有一个科学家叫做克劳德香农,他提供了非常天才的构想。
[图片]
他认为呢,计算机做的所有操作,本质上只有两件事:通电和断电。
这两个操作正好能够对应逻辑学里的真和假,以及 数学上的 1和 0。所以通电代表 1,断电代表 0。
通电 = 真=1
断电 = 假=0
那与或非该怎么表示呢?
现在,你来想象一下,如果我们把两个开关串联,只有当两个开关都打开的时候,电才能通过,这就是 与门,它代表的是“同时成立”。
[图片]
如果我们把两个开关并联,只要其中有一个通电,电流就能通过,这就是 或门。它代表“至少有一个成立”。
[图片]
而非门,就是一个反向执行的开关,就像有一个灯泡,本来你按下它的开关,它应该就会亮,松开开关灯就会灭,但反向开关是反着来的,当你按下开关时,灯灭掉,当你松开开关时,灯反而会亮起来。它输出的结果永远跟输入的相反,这就是非门。
[图片]
这些开关就是芯片里面的一个个晶体管,晶体管的串联、并联、反向组合,就是计算机的逻辑门,成千上万个逻辑门的排列组合,就是计算机的电路。
当然,有了与门、或门、非门,是不够的,还得让它们进行运算。
那该如何运算呢?
我们先来看一下最简单的计算,1+1 等于几。
我们都知道,在十进制里面1+1=2,但是计算机是二进制的,那么,在计算机里1 + 1 = 10,这个 “10” 其实包含两层意思:
右边的这一位(0),叫做结果位,它是当前这一位确定下来的结果。
左边的这一位(1),叫进位,它是当前这一位“溢出”后要传递到下一位的信号。
就像你在装箱子,如果是十进制的,那每个箱子可以装 0-9 个球,第十个球的时候就要溢出传递给左边的箱子,结果位变成0,进位变成 1。
但由于这里是二进制的,每个箱子最多只能装一个球,如果有两个球,就会溢出来,要把多出来的球交给左边的箱子,结果位变成0,进位变成 1。
[图片]
而且计算机只认得 0 和1,与或非,所以,运算的前提,就是把复杂的文字和数学,全部变成最简单的0和 1 、与或非。
1+1 其实就是 两个 1 的信号,彼此相加。
加法在计算机里也是不存在的,它必须得置换成逻辑门,置换以后,加法其实等于:异或(XOR) + 与(AND)的叠加操作。
加法=异或(XOR)+与(AND)
也就是两个信号要同时通过“与门”和“异或门”。
与门很好理解,当两个条件同时成立的时候,也就是当两个信号都为 1 的时候,输出就是 1。
你可以想象这样一个场景, 一个信号控制一个开关,另一个信号控制另一个开关,这两个信号通过控制电压的方式,来决定自己的这个开关是否打开,由于这两个开关是串联的,只有当它们同时都打开,电路才导通,信号输出为 1。
[图片]
在加法器里,这个信号决定了进位的数值,也就溢出的部分。
你想想啊,0+0 不需要进位,0+1 也不需要进位,1+0 也不需要,只有 1+1 的时候才需要进位,恰恰是两个信号都为 1 的时候才进位,所以与门的规则就是进位的规则,与门就是进位检测器。
[图片]
异或门稍微复杂一点,它是一个复合门,是被基本门组合而成的,它的意思是:如果两个信号不同,输出为1 ,如果两个信号相同,输出为 0。
你可以把它理解成一个“翻转逻辑”:当它接收到两个信号,一个亮、一个灭 → 输出亮; 当两个信号都亮的时候 → 输出灭。
[图片]
异或门决定了结果位,为什么呢?
因为在数学里,如果是 0+0,结果位是 0;如果是0+1 或者 1+0,结果位是 1;如果是 1+1,因为两个挤不下,会发生进位,于是结果位剩下0。
你看啊,只有当两个数字不一样的时候,结果为才是 1,所以二进制加法的结果位的规则恰好跟异或门的规则是一模一样。
那我们来看 1+1 的计算过程。
你想象一下,有两个都是 1 的信号,要通过异或门和与门这两个电路, 由于结果位的数值由异或门的规则决定,两个相同的信号,输出是 0。
进位由与门的规则决定,两个都是1 的信号,输出是 1,那么把这两条电信号拼在一起,得出的结果是 10,换算成二进制,就等于 2。
[图片]
这是计算机里做最简单的算法。
那更复杂的计算呢?比如乘法、除法、甚至处理文字、处理图片、又怎么来的。
我们见到的所有信息,其实都可以编码成0 和 1。
比如图片,它其实就是一张巨大的表格:每个格子就是一个像素,每个像素都可以编码成一个数字。 整张图就是 0 和 1 的数字矩阵。
[图片]
[图片]
比如字母,就拿A来说,你可以把它编码成数字65,65 的二进制写法是01000001,这就是 A 在计算机里的表示。
A=65=01000001
又比如声音,它是机械波,有震动的频率和振幅,就可以测量出这些振幅的大小,并且用数字来记录,再把数字转成 二进制写法,变成 0 和 1,这样就可以用计算机处理了。
[图片]
包括乘法除法,或者更复杂的运算,本质上跟加法一样,都是不同逻辑门的排列组合,就像乐高积木,再怎么复杂,都是由一块块小积木搭建起来的。
所以你看,我们从“如果下雨我就带伞”的这句话,推导出了整个计算机的运算逻辑。
当你理解了整个过程以后,你会发现,人类的思维、数学、物理,本就是同一个东西的不同表现形式。计算机也是人类思维的一种映射。
所以爱因斯坦有一句名言:这个世界最不可理解的地方,就是它竟然是可以被理解的。
就好像万事万物存在一个源代码,共享着同一个结构。这个结构太精妙了,太简约了,以至于我做科普的时候经常都会感叹,宇宙的法则真厉害。
这期我讲了计算机是如何让电流来执行逻辑的,但要让它有秩序的思考,还需要有非常天才的架构,下一期我讲讲计算机的架构和配置,来感受一下逻辑的计算是如何在机器中展开的。
评价...
空空如也
小宇宙热门评论...
暂无小宇宙热门评论