编程基础:逻辑运算的转换和简化

逻辑运算

编程中我们经常用到逻辑与(&&)、逻辑或(||)、逻辑非(!),关于与、或、非的基础知识这里不再说明,这里补充二个小知识。

逻辑的转换

简单的说,就是以下二个相等的关系:

(!A) || (!B) == !(A && B)
(!A) && (!B) == !(A || B)

以上二个相等的逻辑关系叫德摩根定律,这里只记住并会应用就好。

比如,如果使用的兵器即不是刀也不是剑,你可以这样判断:

if (weapon != "blade" && weapon != "sword")
{
    // todo
}

也可以这样判断:

if (!(weapon == "blade" || weapon == "sword"))
{
    // todo
}

如果没有装备兵器或者装备的兵器不是剑,你可以这样判断:

if (!weapon || weapon != "sword")
{
    // todo
}

也可以这样判断:

if (!(weapon && weapon == "sword"))
{
    // todo
}

逻辑的简化

在程序开发中,经常用到各种逻辑判断,比如以下二灯游戏,怎么把逻辑关系简化?

游戏中有黃绿二个灯不断闪烁,需要玩家在以下三种情况下按下开关:

  1. 绿灯灭,黄灯亮
  2. 绿灯、黃灯都灭
  3. 绿灯、黃灯都亮

如果用 A 代表绿灯亮、B 代表黃灯亮,那么以上逻辑可以表示为:

if ((!A && B) || (!A && !B) || (A && B))
{
    // todo
}

我们用卡诺图来表示以上逻辑:

B B
false true
A false
A true

从图可知,整个逻辑等价于以下表示:

if (!A || B)
{
    // todo
}

关于卡诺图,有兴趣的可以自己查找更多相关知识学习,这里只是简单引导入门。

通过德摩根定律我们可以转换逻辑与和逻辑或的表达式,通过卡诺图我们可以把复杂的逻辑简化成简单的逻辑。

京ICP备13031296号-4