【发布时间】:2011-11-26 13:02:35
【问题描述】:
我几乎一生都在编程(大约 20 多年),我想我不记得有一次当我看到一个 if 语句并想“嗯,这将是一个使用 XOR 的好时机。”整个逻辑编程领域似乎都围绕着这三个。
当然,使用 AND/OR/NOT 门,您可以做出任何其他逻辑语句。但是,有时可能会节省一些代码来将两个或三个语句组合成一个逻辑语句。让我们看看logical connectives的16种可能组合:
- FALSE = 矛盾 = 0,null,NOT TRUE
- 真 = 重言式 = 1,不假
- X = 命题 X = X
- NOT X = X 的否定 = !X
- Y = 命题 Y = Y
- NOT Y = Y 的否定 = !Y
- X AND Y = 合取 = NOT (X NAND Y)
- X NAND Y = 替代拒绝 = NOT (X AND Y), !X OR !Y
- X OR Y = 析取 = NOT (!X AND !Y)
- X NOR Y = 联合拒绝 = NOT (X OR Y), !X AND !Y
- X ⊅ Y = 材料非暗示 = X AND !Y, NOT(!X OR Y), (X XOR Y) AND X, ???
- X ⊃ Y = 实质含义 = !X OR Y, NOT(X AND !Y), (X XNOR Y) OR X, ???
- X ⊄ Y = 逆非蕴涵 = !X AND Y, NOT(X OR !Y), (X XOR Y) AND Y, ???
- X ⊂ Y = 逆蕴涵 = X OR !Y, NOT(!X AND Y), (X XNOR Y) OR Y, ???
- X XOR Y = 异或分离 = NOT (X IFF Y), NOT (X XNOR Y), X != Y
- X XNOR Y = 双条件 = X IFF Y、NOT (X XOR Y)、!X AND !Y
所以,第 1-2 项涉及零变量,第 3-6 项涉及 1,第 7-10 项是我们熟悉的术语。 (虽然,我们通常没有 NAND 运算符,但至少 Perl 有通用 NOT 的“除非”。)
第 11-14 项看起来很有趣,但我在编程中从未见过这些。第 15-16 项是 XOR/XNOR。
这些中的任何一个都可以用于 AND/OR/NOT 简化吗?如果有,你用过吗?
更新:“不等于”或 != 实际上是 XOR,经常使用。所以,毕竟是在使用 XOR。
【问题讨论】:
-
"这些中的任何一个都可以用于 AND/OR/NOT 简化吗?"你在开玩笑吗?查看列表的右侧。现在看左边。完成。
-
不管怎样,这些运算符最常用于位掩码功能,而不是逻辑/条件简化。
-
你在开玩笑吗?查看列表的右侧。现在看左边。完成。 是的,但我实际上是在说。 XOR 是编程中唯一可用的其他功能,而且我从未真正见过使用它的地方。我的大多数复杂逻辑语句都涉及几个不同的变量,这里不适用。
-
“你在开玩笑吗?看看你列表的右边。现在看看左边。完成了。” - 这也是我最初的反应。我想知道我们是否不理解他所说的“实用”是什么意思。
-
与现实世界的例子一样实用。我们拥有所有这些不同的逻辑门,而我们实际上只使用了三个,这似乎很奇怪。
标签: coding-style logic boolean-logic xor nor