从二进制到逻辑门——哲学中诞生的计算理论
☞ 欢迎来到神奇的01世界 ☜
二进制
二进制来自哲学,自然万物两两相对,白天与黑夜、太阳和月亮、苍天与大地、男人和女人、寒冷与炎热、甘甜和苦涩……我国传统文化中的阴阳学说、太极八卦,都是在讲这些自然的本质。
不光中国,在很久很久以前,世界各地的文明也都或多或少意识到了二进制的意义,只是除了参悟哲学道理,一直没有用到数学中去。
直到17~18世纪,数学上的二进制才由莱布尼茨首次提出。莱布尼茨首先是位伟大的哲学家,至简的理念始终贯穿在他的哲学和数学研究中。他认为,任何数字都可以在0和1的基础上产生。他对中国的哲学文化有着十分浓厚的兴趣,当了解到《易经》时,不禁感叹其中充满智慧的符号系统和他的二进制理论竟如此相仿[1]。
那么,“逢2进1”的二进制如何表示数字呢?我们知道,对于一个十进制数,从最右侧的个位开始,越往高位,数位上的数字所代表的值越大,相邻数位上相同的数字所代表的值相差10倍。比如1024中,个位上的4代表3,十位上的2代表20,千位上的1则代表1000,用数学语言表达就是:
总结而言,就是从右往左数,第n位上的数字所代表的值,是该数字与10n-1的乘积。二进制示数也遵循这一规则。对于一个全是1的二进制数,从右往左,第1位表示20,第2位表示21,第3位表示22,第4位表示23,第5位表示24,以此类推,第11位表示210,即1024。
下表罗列了部分常用的二进制数,在计算机领域,为了方便阅读和处理,常常会以4位为单位在二进制串前补零。
十进制数 | 二进制形式 | 补零后的二进制形式 |
---|---|---|
0 | 0 | 0000 |
1 | 1 | 0001 |
2 | 10 | 0010 |
3 | 11 | 0011 |
4 | 100 | 0100 |
5 | 101 | 0101 |
6 | 110 | 0110 |
7 | 111 | 0111 |
8 | 1000 | 1000 |
9 | 1001 | 1001 |
16 | 1 0000 | 0001 0000 |
32 | 10 0000 | 0010 0000 |
64 | 100 0000 | 0100 0000 |
128 | 1000 0000 | 1000 0000 |
256 | 1 0000 0000 | 0001 0000 0000 |
512 | 10 0000 0000 | 0010 0000 0000 |
1024 | 100 0000 0000 | 0100 0000 0000 |
莱布尼茨还设想过一种可以进行二进制加法的机械计算器,这种机器需要有一排可以开闭的洞口,洞口打开表示1,洞口关闭表示0,通过往洞中扔小弹珠表示加法,每个洞中最多只能存放1颗弹珠,每满2颗它们就会一起从机器中滚出来,洞口也相应关闭,高一位洞口则打开。
布尔代数
莱布尼茨坚信,人类的思想和数字一样可以化繁为简——所有思想都可以分解为数量不多的简单思想。这些简单思想通过一些既定规律,可以组成任意的复杂思想,就像数学运算一样。当两个人发生了争执,他们可以把自己的观点通过数学计算的方式梳理出来,谁对谁错就一目了然了。
为了“计算”思想,莱布尼茨阐述了后来被称为合取(conjunction)、析取(disjunction)、否定(negation)等的逻辑运算规则,成为数理逻辑(mathematical logic)最早的探索者之一。
但逻辑运算在数学上的系统性定义,要等到19世纪由英国数学家乔治·布尔(George Boole)首次提出。布尔分别在1847年和1854年发表了著名的《逻辑的数学分析》和《思维规律的研究》,将数学中的代数方法引入到逻辑学中,被后人称为布尔代数(Boolean algebra),逻辑运算因而也叫布尔运算。
下面通过一个例子介绍简单一下逻辑运算,假设有X、Y两个命题。
X:乔治·布尔发明了二进制。
Y:乔治·布尔创立了布尔代数。
显然,X命题是错的,Y命题是对的。在逻辑学中,我们称:X命题为假,Y命题为真。如果用连词将X、Y两句话连起来说呢?
比如:乔治·布尔发明了二进制且创立了布尔代数。这句话是错的,即“X且Y”的组合命题为假。
再比如:乔治·布尔发明了二进制或创立了布尔代数。这句话是对的,即“X或Y”的组合命题为真。
这就是逻辑学中的合取与析取,也称逻辑与和逻辑或。
当然,也有对单个命题的逻辑运算,比如:乔治·布尔没有发明二进制。这句话是对的,即“非X”为真。
这就是逻辑学中的否定,也称逻辑非。
与、或、非是3种最基本、最常用的逻辑运算。将它们组合起来,还可以形成与非、或非、异或、同或等复杂逻辑运算。历史上,布尔和许多其他逻辑学家曾使用过各种层出不穷的符号来表示它们,如今,我们常用下表中的表达形式。
逻辑运算 | 英文缩写 | 表达式 |
---|---|---|
与 | AND | |
或 | OR | |
非 | NOT | |
与非 | NAND | |
或非 | NOR | |
异或 | XOR | |
同或 | XNOR |
其中,异或和同或其实意如其名,只是表达式有点抽象,它们的展开式十分容易理解:
而逻辑命题的真假像极了二进制中的1和0,布尔代数自然而然选择用1表示真、0表示假。
经过简单的逻辑推演,我们就能得到这些逻辑运算在所有情况下的结果:
X | Y | 与 | 或 | 非X | 与非 | 或非 | 异或 | 同或 |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
不难发现,逻辑运算和二进制运算有着极高的一致性,除了有点违反直觉的:
更巧合的是,逻辑运算和数学运算一样满足交换律、结合律和分配律等各种运算规则,比如:
数字电路
20世纪,随着继电器电路的发展,许多科学家开始将二进制、布尔代数和电路联系到一起,最终,由美国一位名为克劳德·香农(Claude Shannon)的数学家做出了完整阐释。1938年,就读于麻省理工学院的香农发表了他那篇著名的硕士论文《继电器与开关电路的符号分析》,奠定了数字电路的理论基础。
开关电路就是有接通和断开两种状态的电路,继电器电路就是一种典型的开关电路。当我们用X、Y等字母表示开关电路,将两者串联就可以表示逻辑与,将两者并联就可以表示逻辑或。
那么逻辑非如何如何实现呢?还记得有两个静触点的电磁继电器吗?如果X表示常闭触点所在的工作电路,便是常开触点所在的工作电路,两者的通断永远互斥。
有了与、或、非3种基础逻辑电路,异或等复杂逻辑电路也就不难搭建了。
如此一来,电路就彻底数字化了,原本物理的连接可以用数学来表示,是为数字电路。香农认为,基于布尔代数,再复杂的电路都可以用表达式条理清晰地设计出来,更重要的是可以等效化简。香农的研究成为后来二进制机电计算机和电子计算机强大的理论支柱。
逻辑门
逻辑电路发展成熟后,工程师们更多地把它们作为一种电路中的元器件(而不是电路本身)使用。他们不关心这些元器件的内部实现,更关注当代表0或1的信号从它们的输入端进去,从输出端出来的是0还是1。这种通过逻辑电路实现二进制信号转换的元器件称为逻辑门(logic gate),门的概念很形象,二进制数据可以从门通过,也可能被门挡住,庞杂的计算机电路正是靠着一扇扇这样的门组合而成的。下图为IEEE和IEC[2]标准中规定的逻辑门符号,统一的矩形表示更有利于绘制复杂的集成电路,信号从矩形左侧进入,从矩形右侧输出。
组合逻辑电路
逻辑门像一块块标准化的积木,我们可以用这些积木灵活地搭建出实现各种功能的组合逻辑电路。举个最简单的例子——二进制加法器。要实现两个二进制数的相加,首先要实现单个数位的两两相加。用A和B表示两个二进制数某一位上的值,Cin表示来自低位的进位值,S和Cout表示A+B+Cin之后该位的值和向高位产生的进位值,得单数位的加法真值表:
A | B | Cin | S | Cout |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
用2个异或门和3个与非门即可实现这一逻辑,有兴趣的读者可以取几组值验证一下。二进制数有多少位,就需要多少个图中的逻辑电路,相邻数位的低位Cout与高位Cin相连,最低位的Cin永远为0。
减法以及其他更复杂的运算,乃至控制逻辑也可以如法炮制。
最重要的是,开关电路仅仅是逻辑电路的实现途径之一,其实不论任何材料,所组成的基础元件只要能表达出两种状态、能在两种状态之间切换,并能将状态传递给其他基础元件,都可以用来实现逻辑电路以及逻辑门。逻辑门一旦实现,二进制计算机的建造就像搭积木一样简单了。这种基础元件的等效性,是可以用不同材料来建造计算机的本质原因。在本章,我们甚至会见到纯机械的逻辑门,那是建筑二进制计算机的第一批积木,它们尚与电路和电子无关,而是由钢铁制成的。
参考文献
- Wikipedia. Gottfried Wilhelm Leibniz[EB/OL].
- Daniel R L. Development of the Binary Number System and the Foundations of Computer Science[J]. The Mathematics Enthusiast, 2014, 11(3):513-540.
- Boole G. The Mathematical Analysis of Logic[M]. New York: Philosophical Library, 1948.
- 黄耀枢. 布尔与布尔代数[J]. 自然辩证法研究, 1985(4):36-43.
- Wikipedia. Claude Shannon[EB/OL].
- 百度百科. 克劳德·艾尔伍德·香农[EB/OL].
- Shannon C E. A Symbolic Analysis of Relay and Switching Circuits[D]. Boston: University of Michigan, 1938.
- Wikipedia. Logic gate[EB/OL].
关于莱布尼茨是独立发明的二进制,还是受了《易经》启发的争论由来已久,事实上,二进制在很多文化中都早有出现,也有很多先人对它进行过思考和探讨,二进制是人类文明发展到一定程度的必然结果,只是需要某个人把它系统地整理出来而已,而莱布尼茨就是这个人。 ↩
IEC:国际电工委员会(International Electrotechnical Commission),世界上成立最早的电工标准化机构,在电子电气领域制定国际标准。 ↩
从二进制到逻辑门——哲学中诞生的计算理论相关推荐
- 思想萌芽——从哲学中诞生的机械计算思维
☞ 欢迎来到神奇的01世界 ☜ 手动时期的计算工具要么是自然界现成的,要么是简单制作而成,原理都十分简单.许多经典的计算工具之所以强大,譬如算盘,是由于依托了强大的使用方法(即算法),工具本身并不复杂 ...
- ITK:从二进制图像中的对象计算距离图
ITK:从二进制图像中的对象计算距离图 内容提要 C++实现代码 内容提要 从二进制图像中的对象计算距离图 C++实现代码 #include "itkImage.h" #inclu ...
- plc里的二进制 用计算机,PLC中常用数制及如何转换
原标题:PLC中常用数制及如何转换 数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法.任何一个数制都包含两个基本要素:基数和位权. 基数:数制所使用数码的个数.例如,二进制的基数为2:十 ...
- 原来PID是在老王头和老斯基的斗争中诞生的
获取更多好文章: 原来PID是在老王头和老司机的斗争中诞生的 30年前,老王头在国内某十八线小县城的水泥厂做锅炉工.由于水泥厂的环境比较差,工人们工作完都是满身的水泥灰尘,回家前都要在厂子里洗个澡.老 ...
- 第27件事 产品哲学中必须关注的9大人性
第5章 需求分析与管理 第27件事 产品哲学中必须关注的9大人性 第28件事 挖掘用户真实需求的6大撒手锏 第29件事 评估需求的8种方法 第30件事 定义需求优先级的4种方法 第31件事 管理需求 ...
- 计算机二进制基本运算规则,计算机中的二进制运算
一.计算机中的二进制位运算 ??二进制的位运算并不是很难掌握,因为位运算总共只有5种运算:与.或.异或.左移.右移.与.或和异或运算的规律我们可以用表1总结如下. 表1 与.或.异或的运算规律 与(& ...
- 二进制表示中质数个计算置位
二. 二进制表示中质数个计算置位 2.1.题设要求 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回计算置位位数为质数的整数个数.计算置位位数就是 ...
- 《游戏设计艺术(第2版)》——学习笔记(4)第4章 体验从游戏中诞生
<游戏设计艺术(第2版)>学习笔记(4) 第4章 体验从游戏中诞生 定义的争吵 什么是游戏 不,认真一些,什么才是游戏呢 解决问题的入门 我们努力的成果 第4章 体验从游戏中诞生 我们的目 ...
- gpu的单位表示_现代企业中的GPU计算!
从电子工程领域来讲,GPU是一种专门设计,主要用于图形信号处理的单芯片处理器.在独立显卡中, 一般位于PCB板的中心.与之对应的是使用计算机中央处理器的CPU.很久以前,显卡还叫做图形加速器,并不是计 ...
最新文章
- LoveLive!出了一篇AI论文:生成模型自动写曲谱
- source insight快捷键及使用技巧
- 汇编: 用int中断改变ip,实现loop循环
- 获取计算机中的硬件信息
- 搭建Eclipse C++开发环境
- 从阿里中台战略看企业IT架构转型之道(上)
- java实例练习——基于TCP/IP协议的多客户端通信
- c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...
- java selenium教程_Selenium3 Java自动化测试完整教程
- Linux内存管理:NUMA技术详解(非一致内存访问架构)
- Ubuntu 系统调整LVM卷/home分区到 / 分区
- jquery 插件 国外
- Vue学习--MVVM模型
- 从零开始,学习web前端之HTML5
- 轻量纯css框架,网页设计的12个轻量CSS框架
- 论文阅读:Instance Weighting in Dialogue Systems
- C#实现来电显示功能
- juniper防火墙外部网址设置
- 医药电商行业概况及发展趋势!
- w10计算机无法打印,win10电脑无法打印文件怎么办?