我几乎一生都在编程(大约在20+年左右),我想我不记得有一次当我看到一个if-语句时,我想“嗯,现在是使用XOR的好时机。”整个逻辑编程宇宙似乎都围绕着这三个。
当然,使用AND/OR/NOT门,您可以做任何其他逻辑语句。但是,有时可能会为您节省一些代码,以便将两个或三个语句组合成一个逻辑语句。让我们看看逻辑连接词的16种可能组合
因此,第1-2项涉及零变量,第3-6项涉及一个变量,第7-10项是我们熟悉的术语。(不过,我们通常没有NAND运算符,但至少Perl有“除非”用于通用的。)
项目11-14看起来很有趣,但我在编程中从未见过这些。第15-16项是异或/异或。
其中任何一项是否可用于和/或/或不简化?如果是的话,你用过吗?
更新:“不相等”或!=实际上是XOR,经常使用。所以,异或毕竟是被使用的。
发布于 2011-09-29 01:56:26
在不等于/XOR之后结束这个问题。在16个可能的操作符中,程序员使用了其中的9个:
FALSE, TRUE, X, Y, !X, !Y, AND (or ==), OR, XOR (or !=)
其他所有运算符通常都不存在于编程语言中:
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 )。
发布于 2011-09-28 14:42:06
考虑到这一点:
if(an odd number of conditions are true) then return 1 else return 0
使用和/或/或不,您可以尝试
if(one is true || three are true || ... 2n+1 are true) then return 1 else return 0
这是非常丑陋的,因为您必须指定每个1-集、3-集、5-集、.,2n+1集,它们是条件集的子集。异或版本相当优雅,尽管.
if(C1 XOR C2 XOR ... XOR CN) then return 1 else return 0
对于大的或变量N,这可能最好用循环和计数器系统来处理,但是当N不是太大(~10),而且您还没有将条件存储为数组时,情况就不会那么糟糕了。用于检查偶数条件的工作方式相同。
你也可以为其他人提供类似的例子。一个有趣的练习是尝试编写类似于
if((A && !B) || (!A && B)) then return 1 else return 0
并查看编译器是否为and、or和NOT发出汇编语言,还是聪明到能够识别这是XOR,并在此基础上发出(可能更便宜的) XOR指令。
发布于 2015-11-03 07:57:27
在用java进行编程时,我倾向于使用以下逻辑函数:
!
&&
||
==
!=
将其扩展到其他基本功能:
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简单得多,反之亦然。
https://stackoverflow.com/questions/7578068
复制相似问题