Lou*_*nco 11
AND的真值表
A B AND T T T T F F F T F F F F
OR的真值表
A B OR T T T T F T F T T F F F
XOR的真值表
A B XOR T T F T F T F T T F F F
因此,XOR就像OR,除非A和B为真,否则它是假的.
那么,(A OR B)AND(NOT(A和B)),即(A OR B)AND(A NAND B)
A B OR AND NAND [(A OR B) AND (A NAND B)] T T T T F F T F T F T T F T T F T T F F F F T F
不确定是否可以在没有NOT或NAND的情况下完成
Zac*_*aad 11
(a XOR b) = ((a OR b) - (a AND b))
,或者换句话说,并集减去交集。
代码示例(在 JavaScript 中):
var a = 5;
var b = 12;
var xor = (a | b) - (a & b); // result: 9
Run Code Online (Sandbox Code Playgroud)
如果除了按位 AND ( ) 和 OR ( ) 之外还有算术运算符,例如 and ,+
那么您-
可以像这样进行按位 XOR :&
|
int bitwise_XOR(int a, int b)
{
return (a + b) - (a & b) - (a & b);
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是我们正在进行全加,当任何给定位位置的总和 <= 1 时,这相当于 XOR,然后我们纠正生成进位 (1 + 1) 的情况通过减去2 * (a & b)
.
请注意,即使中间项溢出,这也有效,假设我们有“正常表现”的整数(2 的补码、溢出的模 2 环绕等)。
“系统 ({T, F}, and) 和 ({T, F}, or) 是幺半群。”
“系统({T,F},xor)是一个阿贝尔群”,与幺半群不同,它具有可逆性。
因此,“与”和“或”无法构造“异或”运算。
资料来源:https ://en.wikipedia.org/wiki/Exclusive_or#Relation_to_modern_algebra
创建我自己的脚本语言 - ChrisScript - 你只需要类似的东西:
#!/bin/chrish
bit XOR (bit A, bit B)
{
bit notA;
bit notB;
IF (A == 0) notA = 1 ELSE notA = 0;
IF (B == 0) notB = 1 ELSE notB = 0;
F = ((A && notB) || (notA && B));
RETURN F;
}
Run Code Online (Sandbox Code Playgroud)
即使没有 NOT,也可以这样模拟。但这是您在没有某种形式的逆变器的情况下可以获得的最佳解决方案。我很难相信您没有某种形式的可用逆变器——您使用什么脚本环境?