使用单个 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 两种情况的真相 1
是 true
和 0
是 false
, 有没有办法将事实 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
可以是 true
或 false
,因此只有两个值。如果您尝试使用不是 bool
的东西作为逻辑操作数,那么就会出现问题。考虑到这一点,当你想产生相等性时,如果最初它们没有产生正确的结果,则取反任何操作数(0 == 0 = 1 和 1 == 1 = 1,如果你理解我的话)。
在您的特定情况下,我们在 table 中只有一个 1,因此它是一个 AND 运算。对于这 1 个结果,两个操作数都是 0,所以我们必须将它们都取反:
!A && !B
我的代码如下所示:
/*
* 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 两种情况的真相 1
是 true
和 0
是 false
, 有没有办法将事实 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
可以是 true
或 false
,因此只有两个值。如果您尝试使用不是 bool
的东西作为逻辑操作数,那么就会出现问题。考虑到这一点,当你想产生相等性时,如果最初它们没有产生正确的结果,则取反任何操作数(0 == 0 = 1 和 1 == 1 = 1,如果你理解我的话)。
在您的特定情况下,我们在 table 中只有一个 1,因此它是一个 AND 运算。对于这 1 个结果,两个操作数都是 0,所以我们必须将它们都取反:
!A && !B