使用单个 if 条件表达真理 table

Express a truth table using a single if-condition

我的代码如下所示:

/*
 * A B
 * 0 0 -> 1
 * 0 1 -> 0
 * 1 0 -> 0
 * 1 1 -> 0
 */

#define A condition_1
#define B condition_2

if (A) {
    // do nothing
} else {
    if (B) {
        // do nothing
    } else {
        // do something
    }
}

上面我已经报道了 table 两种情况的真相 1true0false, 有没有办法将事实 table 表达为单个 if 条件?

你的真值table代表一个NOR(非或)运算。您可以通过将逻辑 NOT (!) 与逻辑 OR (||)

结合起来轻松实现
if (!(A || B)) {

}

PS。请不要使用 #define 宏。它非常容易出错,而且往往会咬住使用它的程序员。通常有更安全、更易读的方法来执行宏的功能。

使用:

if (!A && !B) {
    // do something
}

想一想,只有当两个条件都为假 (0 0 -> 1) 时,您的真理 table 才 returns 1。 您可以在两者中使用 ! 来反转它。

如果table中只有一个1那么本质上就是AND运算。如果只有一个 0 则为 OR 运算。如果两者都有,则可以将其设为相等操作。

当您知道选择哪种操作后,下一步就是找出应该取反哪些操作数。对于 AND,两个操作数都必须变为 1 才能产生 1(1 AND 1 = 1),因此否定那些否则会产生 0 的人。对于 OR 则相反,否定那些在尝试将 0 作为结果时会产生 1 的人(0 OR 0 = 0)

对于相等运算,请记住 bool 可以是 truefalse,因此只有两个值。如果您尝试使用不是 bool 的东西作为逻辑操作数,那么就会出现问题。考虑到这一点,当你想产生相等性时,如果最初它们没有产生正确的结果,则取反任何操作数(0 == 0 = 1 和 1 == 1 = 1,如果你理解我的话)。

在您的特定情况下,我们在 table 中只有一个 1,因此它是一个 AND 运算。对于这 1 个结果,两个操作数都是 0,所以我们必须将它们都取反:

!A && !B