逻辑运算又叫布尔运算,是英国数学家乔治·布尔在19世纪发明的——说发明也不太准确,逻辑运算其实早就存在。早在欧几里德时代,人们就已经用逻辑推理的方法通过预设的公理来建立几何学体系了。但是乔治·布尔第一次把逻辑运算系统化、符号化,让逻辑运算成为像算术运算那样可以用数学语言进行描述和研究的体系,从而深刻影响了后续数理逻辑学的建立,甚至间接影响了维特根斯坦和罗素的哲学思想。
电子计算机出现以后,计算机电路“通导“和”断开“两种状态完美符合逻辑运算中的”真“和”假“两个布尔值的互斥特征。因此早期的真空管计算机,包括后续的晶体管计算机、集成电路计算机都采用逻辑运算作为基本的运算方式。当然有些人出于科研或者装X的需要也研制过其他形式的计算机,比如三值计算机(baike.com/wiki/%E4%B8%8),生物计算机(baike.com/wiki/%E7%94%9)等等。但是因为成本问题,或者是计算能力问题,这些新型计算机基本都扑街了。到目前为止,主流计算机还是以逻辑运算为基础,计算机所有的功能——显示网页,播放视频,运行游戏,执行科学计算,等等等等——最底层的基础都是逻辑运算。
逻辑运算与逻辑学不同。逻辑运算只是一组运算法则,跟加减乘除这些算术运算类似。而逻辑学是研究思维方式的一门科学。逻辑学中的形式逻辑学会用到一些逻辑运算,用来计算命题或者断言的真假。可以把逻辑运算理解成形式逻辑学中采用的工具,就好像物理学采用微积分作为计算工具一样。
在介绍逻辑运算之前,我们先回顾一下小学就学过的算术运算。算术运算中参与计算的对象是1,2,3,0.8,2/3,π等等,这些对象构成一个集合,我们称之为实数集合。算术运算就是在实数集合上的一组计算规则。参与计算的实数如果只有一个,这种运算就称作“单目运算”。比如求相反数,求绝对值,求一个正数的平方根,这些都是单目运算。如果需要两个实数参与运算,这种运算就称作“双目运算”。我们最常用的加、减、乘、除,以及不太常用的幂运算、对数运算,都是双目运算。算术运算的结果也属于实数集合,因此我们说实数集合对算术运算是封闭的。
类比到逻辑运算,逻辑运算中参与计算的对象只有两个,就是“逻辑真”和“逻辑假”。“逻辑真”简称“真”,用字母T表示,“逻辑假”简称“假”,用字母F表示。T和F也构成一个集合,我们称之为布尔集合。布尔集合对逻辑运算也是封闭的。逻辑运算的基本算子包括双目运算“逻辑与”,“逻辑或”,以及单目运算“逻辑非”。另外还有一个不是那么基本,但是也比较常用的双目运算“逻辑异或”。下面我们分别进行详细介绍。
1. 逻辑与
逻辑与是作用于布尔集合上的双目运算,对于参与逻辑与运算的两个值a和b,当且仅当a和b同时为真时,结果才为真,否则结果为假。
逻辑与的运算符通常记作∧。
由于逻辑运算作用的布尔集合只有两个值“真”和“假”(T和F),因此可以把逻辑与运算 的所有情况都列举出来:
T ∧ T = TT ∧ F = FF ∧ T = FF ∧ F = F
把所有这些情况的输入输出的情况列成表格,这样的表格称为“真值表”。比如,下图就是逻辑与运算的真值表:
逻辑与的真值表
2. 逻辑或
逻辑或是作用于布尔集合上的双目运算,对于参与逻辑或运算的两个值a和b,当且仅当a和b同时为假时,结果才为假,否则结果为真。
逻辑或的运算符通常记作∨。
逻辑或运算的真值表如下图:
逻辑或的真值表
3. 逻辑非
逻辑非是作用于布尔集合上的单目运算,对于参与逻辑非运算的值a,当a为真时,结果为假,当a为假时,结果为真。
逻辑非的运算符通常记作¬
逻辑非运算的真值表如下图:
逻辑非的真值表
4. 逻辑异或
逻辑异或是作用于布尔集合上的双目运算,对于参与逻辑异或运算的两个值a和b,当a和b相同时,结果为假;当a和b不同时,结果为真。
逻辑异或的运算符通常记作⊕
逻辑异或的真值表如下图:
逻辑异或的真值表
前面说过逻辑异或并不是逻辑运算的基本算子,因为逻辑异或可以通过逻辑与、逻辑或、逻辑非三种基本运算组合出来,而且组合的方式不止一种。比如我们考虑以下这个组合运算:
(¬a∧b)∨(¬b∧a)
为a和b输入不同的值可以得到这个组合运算的真值表如下图:
(¬a∧b)∨(¬b∧a)的真值表
可以看到这个真值表跟异或运算的真值表一模一样。所以有:
a⊕b = (¬a∧b)∨(¬b∧a)
把异或运算单独设计一个符号,只是为了书写和交流方便。因为异或运算在逻辑运算中是比较常用的。
好了,关于逻辑运算,今天就讲到这里。
图文来自爆栈工程师