gpt4 book ai didi

boolean - 当只有一个变量为真时,什么是 boolean 方程为真?

转载 作者:行者123 更新时间:2023-12-02 06:37:16 26 4
gpt4 key购买 nike

我有 4 个变量,这是我能做的最好的,但如果有 3 个真实变量,它会返回 true。

如果(a ^ b ^ c ^ d)

最佳答案

如果您使用的是 C,其中 boolean 值只是 0/1 值,您可以使用:

a + b + c + d == 1

否则,前提是您可以使用&&||:

( a && !b && !c && !d) ||
(!a && b && !c && !d) ||
(!a && !b && c && !d) ||
(!a && !b && !c && d)

这只是将其分解为四种可能的情况,每种情况只有一个变量集。

现在您可以使用卡诺图“简化”它,如下所示(所有空白均为假):

         AB
0 0 1 1
0 1 0 1
+---+---+---+---+
CD 00 | | T | T | |
+---+---+---+---+
01 | T | | | |
+---+---+---+---+
10 | T | | | |
+---+---+---+---+
11 | | | | |
+---+---+---+---+

成为:

((a ^ b) && !c && !d) || ((c ^ d) && !a && !b)

但它比上面更简单的表达式更难理解(和调试),而且并没有真正节省多少,除非你精通 boolean 代数、德摩根定理、卡诺图等,坚持使用第一个.


为了证明表达式是等价的,请考虑以下用于检查所有可能性的 C 代码:

#include <stdio.h>

int main (void) {
int a, b, c, d, x, y;

for (a = 0; a < 2; a++) {
for (b = 0; b < 2; b++) {
for (c = 0; c < 2; c++) {
for (d = 0; d < 2; d++) {
x =
( a && !b && !c && !d) ||
(!a && b && !c && !d) ||
(!a && !b && c && !d) ||
(!a && !b && !c && d);
y = ((a ^ b) && !c && !d) || ((c ^ d) && !a && !b);
printf ("%d %d %d %d | %d %d | %s\n",
a, b, c, d, x, y, (x == y) ? "Okay" : "Bad");
}
}
}
}
return 0;
}

这会输出所有 16 种可能性,表明这两个表达式产生相同的结果:

0 0 0 0 | 0 0 | Okay
0 0 0 1 | 1 1 | Okay
0 0 1 0 | 1 1 | Okay
0 0 1 1 | 0 0 | Okay
0 1 0 0 | 1 1 | Okay
0 1 0 1 | 0 0 | Okay
0 1 1 0 | 0 0 | Okay
0 1 1 1 | 0 0 | Okay
1 0 0 0 | 1 1 | Okay
1 0 0 1 | 0 0 | Okay
1 0 1 0 | 0 0 | Okay
1 0 1 1 | 0 0 | Okay
1 1 0 0 | 0 0 | Okay
1 1 0 1 | 0 0 | Okay
1 1 1 0 | 0 0 | Okay
1 1 1 1 | 0 0 | Okay

关于boolean - 当只有一个变量为真时,什么是 boolean 方程为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15426128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com