多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 2.4.3 布尔代数运算定律* 将实际问题所涉及的条件表达成布尔表达式,并且能对布尔表达式进行演算,这是程序员必须具备的重要能力。前面介绍的逻辑运算符用于表达各种复杂条件,下面介绍用于布尔 表达式演算、推导的一些运算定律。 我们不加证明地罗列一些布尔代数中常用的定律如下,其中 a、b、c 代表任意布尔表 达式。为了不与赋值符号=和比较运算符==混淆,我们用<=>来表示左右相等。 (1)a and False <=> False (2)a and True <=> a (3)a or False <=> a (4)a or True <=> True 从以上四条定律可见,and 类似于二进制算术中的乘法运算,or 类似于加法运算,True 类似于 1,False 类似 0。这不是巧合,事实上,布尔代数和二进制代数本质上是一样的。 下面两条定律称为分配律: (5)a or (b and c) <=> (a or b) and (a or c) (6)a and (b or c) <=> (a and b) or (a and c) 对否定的否定当然就是肯定,这就是双重否定律: (7)not(not a) <=> a 下面两条定律称为 De Morgan 定律,用于将 not 深入到被否定表达式的内部。 (8)not(a or b) <=> (not a) and (not b) (9)not(a and b) <=> (not a) or (not b) 程序设计中布尔代数运算定律可以用来化简复杂的布尔表达式,以便代码更容易理解。 以上面的继续进行一局比赛的条件为例, not (a == 11 or b == 11) <=> (not (a == 11) and not (b == 11)) <=> a != 11 and b != 11 原来的继续比赛条件 not (a == 11 or b == 11)可以直接解读为:当“(a 得到 11 分或者 b 得到 11 分)不是事实”。这似乎不太合乎我们的日常表达方式。通过应用 De Morgan 定律,最后化简为等价的 a != 11 and b != 11,这个表达式可解读为“当 a 不是 11 分并且 b 也不是 11 分”,也许更容易理解一些。 上例为我们展示了一条编程经验:将实际应用中涉及的条件翻译成布尔表达式时,如果 很容易表达某种事件的终止条件,却较难表达该事件的继续条件,那么可以先将终止条件写 下来,然后对它用 not 加以否定,就得到了继续条件,最后再利用 De Morgan 定律简化这 个继续条件。