else if 怎么写成逻辑语句?

How to write else if as logical statement?

我想写一个 if-else 语句作为逻辑语句。我知道:

if (statement1){
   b=c
}
else{
   b=d
}

可以写成:

b=(statement1 && c)||(!statement1 && d)

但是我如何将以下 if-else 语句写得合乎逻辑?:

if (statement1){
   b=c
}
else if (statement2){
   b=d
}
else{
   b=e
}

我想到了类似的东西:

b=(statement1 && c)||(statement2 && d)||((!statement1&&!statement2) && e)

如果已经有关于此的 post,我很抱歉。我试过了,但找不到与我的问题类似的问题。

与所有逻辑语句构建一样,在此处创建事实是最容易的 table。你最终会得到:

+--+--+--------+
|s2|s1| result |
+--+--+--------+
| 0| 0|   e    |
+--+--+--------+
| 0| 1|   c    |
+--+--+--------+
| 1| 0|   d    |
+--+--+--------+
| 1| 1|   c    |
+--+--+--------+

如此简单,那就是

(!s1 & !s2 & e) || (!s2 & s1 & c) || (s2 & !s1 & d) || (s1 & s2 & c)

这可以通过合并两个 c 结果并删除 s2:

来简化
(!s1 & !s2 & e) || (s2 & !s1 & d) || (s1 & c)

(请注意,这在 C++ 中会更快,并将 if 语句更接近地与 s1 & c 作为第一项匹配。如果评估这些值中的任何一个会导致外部影响)


请注意,您构建的是什么,

(statement1 && c)||(statement2 && d)||((!statement1&&!statement2) && e)
如果 statement1 为真,c 为假,并且 statement2d 都为真,

将无法正常运行(当你应该有 false).