逻辑运算(Logical Operations)是对“真/假”值进行运算的规则体系,常见于命题逻辑、编程语言条件判断、数字电路、数据库查询和集合运算等。下面按“基本逻辑运算-性质-编程/位运算-扩展”等详细介绍之。
一、逻辑值与记号
常用取值:
▲ 真:1、T、True
▲ 假:0、F、False
设命题 A,B为逻辑变量。常见连接词详见下表1,包括各种(8种)基本逻辑的运算、记号和读法。
表 1:逻辑变量的常见连接词
二、基本逻辑运算
1、逻辑非(NOT)
定义:¬ A,在A为真时为假,在 A为假时为真。
规则:¬ 0 = 1, ¬ 1 = 0
也叫“取反”、“否定”。双重否定还原:¬(¬ A)= A
示例:A =“今天下雨”,则 ¬ A =“今天不下雨”。
2、逻辑与(AND)
定义:A∧B,仅当 A,B都为真时才为真。
规则:0∧0 = 0, 0∧1 = 0, 1∧0 = 0, 1∧1 = 1;或者:1 AND X = X, 0 AND X = 0。
性质:包括交换律、结合律、幂等律、归零律、同一律等,详见下表2-2的介绍。
示例:A =“会开车”,B =“有驾照”,则A∧B表示两者都满足。
表 2-2:逻辑与、逻辑或的性质
3、逻辑或(OR)
定义:A∨B,只要A,B中至少一个为真就为真;只有两者都假时才假。
规则:0∨0 = 0, 0∨1 = 1, 1∨0 = 1, 1∨1 = 1
性质:包括交换律、结合律、幂等律、归零律、同一律等,也详见表2-2中。
示例:“会英语或会法语”允许两者都会。注意:逻辑“或”通常是“可兼或”,不是“二选一”。
4、逻辑异或(XOR)
定义:A⊕B,当 A,B真假不同时为真,相同时为假。
规则:0 ⊕ 0 = 0, 1 ⊕ 1 = 0, 0 ⊕ 1 = 1, 1 ⊕ 0 = 1
等价表达:A⊕B =(A∧¬B)∨(¬A∧B)
性质:包括交换律、结合律、恒等律、归零律等,详见下表2-4的介绍。
注意:异或常表示“二者恰有一个成立”、“不同则为真”。在编程中常用于翻转位、校验、加密和找唯一出现奇数次的元素。
表 2-4:逻辑异或的性质
5、逻辑等价/逻辑同或(XNOR)
定义:A↔B 或 A⊙B,A,B真假相同时为真,不同时为假。它与异或相反:A↔B = ¬(A⊕B)
规则:0 ↔ 0 = 1,0 ↔ 1 = 0,1 ↔ 0 = 0,1 ↔ 1 = 1
等价表达:A ↔ B =(A∧B)∨(¬A∧¬B)
读作:“A 当且仅当 B”。
6、蕴含(IMPLIES)
定义:A→B,读作“如果 A,那么 B”。它只在“前件 A 为真、后件 B 为假”时为假,其余情况为真。
规则:0 → 0 = 1,0 → 1 = 1,1 → 0 = 0,1 → 1 = 1
重要等价式:A → B = ¬A∨B
注意:当前件为假时,整个蕴含命题为真。例如“如果明天下雨,我就带伞”,只有“明天下雨且我没带伞”才违反该承诺;如果没下雨,无论带不带伞,都不能说这句话为假。
7、与非(NAND)、或非( NOR)
定义:与非:A↑B = ¬(A∧B);或非:A↓B = ¬(A∨B)
注意:它们在数字电路中很重要,因为“与非门”和“或非门”都是通用逻辑门,可以单独实现非、与、或等所有基本逻辑。
示例:用与非实现非:¬A = A↑A;用与非实现与:A∧B = ¬(A↑B)=(A↑B)↑(A↑B)
三、逻辑运算的相关说明
1、逻辑运算的逻辑核心
下表3-1总结了上述各种基本逻辑运算的逻辑运算核心(即运算达到的目的)。
表 3-1:基本逻辑运算的逻辑运算核心
2、运算优先级
在上述基本逻辑运算中,命题逻辑中常见优先级从高到低大致为:¬ > ∧ > ∨ > → > ↔。即:先非,再与,再或,再蕴含,最后等价。不同教材可能略有约定,实际书写建议加括号。
3、多值逻辑与模糊逻辑
经典逻辑只有真(1)、假(0)两值。实际系统中还有:
▲ 三值逻辑:真、假、未知/空值,如 SQL 中的“NULL”;
▲ 模糊逻辑:真值可取(0,1)之间的隶属度;
▲ 多值逻辑:取值超过两个。
四、逻辑运算的典型工具
1、逻辑运算真值表
常见逻辑运算真值表详见下表4-1。逻辑运算真值表是用表格形式,穷举所有输入变量的真假组合,对应列出逻辑运算输出结果的工具(同样通常用1表示真、0表示假)。
表 4-1:常见逻辑运算真值表
2、重要运算定律
下表4-2给出了几个重要运算定律及其表达式,包括:德摩根定律、分配律、吸收律、互补律、蕴含与等价的转换律等。它们是逻辑运算中化简和证明的核心工具。
表 4-2:重要逻辑运算定律
五、逻辑运算的典型应用
1、位运算中的逻辑运算
位运算是把把逻辑运算规则逐位应用到二进制上。位运算把整数看成二进制位序列,对每一位分别做逻辑运算。典型的按位逻辑运算包括:按位非、按位与、按位或、按位异或。具体详见下表5-1-1的说明(包括符号、表达式和用途等);下表5-1-2给出了它们的常用技巧介绍,包括:判断奇偶、清零某位、翻转某位、移位、交换、等等。
表 5-1-1:典型的按位逻辑运算说明
表 5-1-2:典型的按位逻辑运算技巧
注意:位运算与逻辑运算不要混淆:&是按位与,&& 是逻辑与;| 是按位或,|| 是逻辑或。具体不同可见下表5-1-3的介绍。
表 5-1-3:位运算与逻辑运算的不同
欲更多了解IPv4网络中子网掩码用于逻辑运算的请进入。
2、编程中的逻辑运算
编程中的逻辑运算,又称布尔运算,是计算机程序进行条件判断、流程控制和决策的核心基础。它基于布尔代数理论,同样主要处理“真”(True/1)与“假”(False/0)两种状态。大多数编程语言(如 Java、C++、Python、JavaScript、C# 等)都遵循以下四种基本逻辑运算规则:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)、逻辑异或(XOR)。具体详见下表5-2-1的说明,包括符号、规则、表达式及应用场景等。
表 5-2-1:典型的编程逻辑运算说明
编程中的逻辑运算中,具有“短路求值(Short-Circuit Evaluation)的关键特性。即在现代编程语言中,&& 和 || 通常具有短路特性,这是编写高效和安全代码的关键。具体详见下表5-2-1的介绍。
表 5-2-1:短路特性:&& 的短路和 || 的短路
在上述的混合运算中,优先级决定了计算顺序。通用规则如下(从高到低):一是,逻辑非(! / not)优先级最高,先执行取反;二是,逻辑与(&& / and)优先级居中;三是,逻辑或(|| / or)优先级最低。
事实上,逻辑运算在ICT领域由大量用途。在数据分析中,通过逻辑运算组合多个数据校验规则,一键剔除异常值、缺失值,快速得到干净的可用数据集。在图像处理、机器学习张量运算中,用逻辑运算生成布尔掩码,快速筛选出符合条件的像素点或特征数据,实现批量数据的精准处理。等等。
欲进一步了解通信理论分析中相关函数及计算公式介绍的请进入。