逻辑运算
编程中我们经常用到逻辑与(&&)、逻辑或(||)、逻辑非(!),关于与、或、非的基础知识这里不再说明,这里补充二个小知识。
逻辑的转换
简单的说,就是以下二个相等的关系:
(!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
}
逻辑的简化
在程序开发中,经常用到各种逻辑判断,比如以下二灯游戏,怎么把逻辑关系简化?
游戏中有黃绿二个灯不断闪烁,需要玩家在以下三种情况下按下开关:
- 绿灯灭,黄灯亮
- 绿灯、黃灯都灭
- 绿灯、黃灯都亮
如果用 A 代表绿灯亮、B 代表黃灯亮,那么以上逻辑可以表示为:
if ((!A && B) || (!A && !B) || (A && B))
{
// todo
}
我们用卡诺图来表示以上逻辑:
B | B | ||
---|---|---|---|
false | true | ||
A | false | √ | √ |
A | true | √ |
从图可知,整个逻辑等价于以下表示:
if (!A || B)
{
// todo
}
关于卡诺图,有兴趣的可以自己查找更多相关知识学习,这里只是简单引导入门。
通过德摩根定律我们可以转换逻辑与和逻辑或的表达式,通过卡诺图我们可以把复杂的逻辑简化成简单的逻辑。