首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除了和/或/否,其他逻辑运算符在编程中有什么意义?

除了和/或/否,其他逻辑运算符在编程中有什么意义?
EN

Stack Overflow用户
提问于 2011-09-28 03:47:05
回答 5查看 4.4K关注 0票数 4

我几乎一生都在编程(大约在20+年左右),我想我不记得有一次当我看到一个if-语句时,我想“嗯,现在是使用XOR的好时机。”整个逻辑编程宇宙似乎都围绕着这三个。

当然,使用AND/OR/NOT门,您可以做任何其他逻辑语句。但是,有时可能会为您节省一些代码,以便将两个或三个语句组合成一个逻辑语句。让我们看看逻辑连接词的16种可能组合

  1. 假=矛盾= 0,空,不为真
  2. 真=重言式= 1,而不是假
  3. X=命题X=X
  4. 不是X=X的否定
  5. Y=命题Y=Y
  6. 不是Y=Y=y的否定
  7. X和Y=连词= NOT (X NAND Y)
  8. X NAND Y=替代否认= NOT (X和Y),!X或!Y
  9. X或Y=析取= NOT (!X和!Y)
  10. X或Y=联合否认= NOT (X或Y),!X和!Y
  11. X⊅Y=材料非蕴涵=X和!Y,NOT(!X或Y),(X XOR Y)和X,?
  12. X⊃Y=物质蕴涵= !X或Y,NOT(X和! Y),(X XNOR Y)或X,?
  13. X⊄Y=逆非蕴涵= !X和Y,NOT(X或! Y),(X XOR Y)和Y,?
  14. X⊂Y=逆蕴涵=X或!Y,NOT(!X和Y),(X XNOR Y)或Y,?
  15. X XOR Y=排他性分离= NOT (X IFF Y),NOT (X XNOR Y),X != Y
  16. X XNOR Y=双向=X IFF Y,NOT (X XOR Y),!X和!Y

因此,第1-2项涉及零变量,第3-6项涉及一个变量,第7-10项是我们熟悉的术语。(不过,我们通常没有NAND运算符,但至少Perl有“除非”用于通用的。)

项目11-14看起来很有趣,但我在编程中从未见过这些。第15-16项是异或/异或。

其中任何一项是否可用于和/或/或不简化?如果是的话,你用过吗?

更新:“不相等”或!=实际上是XOR,经常使用。所以,异或毕竟是被使用的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-29 01:56:26

在不等于/XOR之后结束这个问题。在16个可能的操作符中,程序员使用了其中的9个:

代码语言:javascript
运行
复制
FALSE, TRUE, X, Y, !X, !Y, AND (or ==), OR, XOR (or !=)

其他所有运算符通常都不存在于编程语言中:

代码语言:javascript
运行
复制
X NAND Y = Alternative Denial = NOT (X AND Y), !X OR !Y
X NOR Y = Joint Denial = NOT (X OR Y), !X AND !Y
X ⊅ Y = Material Nonimplication = X AND !Y, NOT(!X OR Y), (X XOR Y) AND X, ???
X ⊃ Y = Material Implication = !X OR Y, NOT(X AND !Y), (X XNOR Y) OR X, ???
X ⊄ Y = Converse Nonimplication = !X AND Y, NOT(X OR !Y), (X XOR Y) AND Y, ???
X ⊂ Y = Converse Implication = X OR !Y, NOT(!X AND Y), (X XNOR Y) OR Y, ???
X XNOR Y = Biconditional = X IFF Y, NOT (X XOR Y), !X AND !Y

也许以后他们还有空间,因为NAND/NOR看起来非常方便,而且比输入NOT更干净( xxx )。

票数 4
EN

Stack Overflow用户

发布于 2011-09-28 14:42:06

考虑到这一点:

代码语言:javascript
运行
复制
  if(an odd number of conditions are true) then return 1 else return 0

使用和/或/或不,您可以尝试

代码语言:javascript
运行
复制
  if(one is true || three are true || ... 2n+1 are true) then return 1 else return 0

这是非常丑陋的,因为您必须指定每个1-集、3-集、5-集、.,2n+1集,它们是条件集的子集。异或版本相当优雅,尽管.

代码语言:javascript
运行
复制
  if(C1 XOR C2 XOR ... XOR CN) then return 1 else return 0

对于大的或变量N,这可能最好用循环和计数器系统来处理,但是当N不是太大(~10),而且您还没有将条件存储为数组时,情况就不会那么糟糕了。用于检查偶数条件的工作方式相同。

你也可以为其他人提供类似的例子。一个有趣的练习是尝试编写类似于

代码语言:javascript
运行
复制
  if((A && !B) || (!A && B)) then return 1 else return 0

并查看编译器是否为and、or和NOT发出汇编语言,还是聪明到能够识别这是XOR,并在此基础上发出(可能更便宜的) XOR指令。

票数 0
EN

Stack Overflow用户

发布于 2015-11-03 07:57:27

在用java进行编程时,我倾向于使用以下逻辑函数:

  • 不是!
  • &&
  • ||
  • xnor ==
  • 异或!=

将其扩展到其他基本功能:

  • 物质含义A || !B
  • 逆蕴涵!A || B
  • 物质非蕴涵!A && B
  • 逆非蕴涵A && !B

知道何时使用xor和xnor可以简化逻辑。一般来说,当您有一个复杂的函数时:

1)将.*简化为CNF (“合正规形式”又名“和上积”)或DNF (“析取范式”“aka”乘积超过和“)。

2)删除附加条款A && (A || B)A || (A && B) -> A

2)简化(A || !B) && (!A || B)(!A && !B) || (A && B) -> A == B

3)简化(A || B) && (!A || !B)(A && !B) || (!A && B) -> A != B

使用这3种简化可以使使用xor和xnor函数的代码更加简洁。

*应该指出,在DNF中逻辑函数可能比CNF简单得多,反之亦然。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7578068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档