u8i*_*8it 10
基本逻辑运算符
NOT = (1-x)
AND = x*y
从这些运营商我们可以得到......
OR= (1-(1-a)(1-b))=a + b - ab
OR= a + b,如果我们知道a*b = 0a&b的所有值
2因子异或
从所有真实条件的集合中得出......
XOR= 1 - (1 - a(1-b))(1 - b(1-a))=a + b - ab(3 - a - b + ab)
源于对真实条件的赞美......
XOR= (1 - abc)(1 - (1-a)(1-b)(1-c))=a + b - ab(1 + a + b - ab)
因为我们可以(a & !b) || (!a & b)用互斥的术语写作,所以我们可以OR简单地简化翻译+并获得......
XOR = a + b - 2ab
对于二进制值,我们可以将此表达式压缩为
XOR = (a-b)²
多因素异或
XOR = (1 - A*B*C...)(1 - (1-A)(1-B)(1-C)...)
Excel VBA示例...
Function ArithmeticXOR(R As Range, Optional EvaluateEquation = True)
Dim AndOfNots As String
Dim AndGate As String
For Each c In R
AndOfNots = AndOfNots & "*(1-" & c.Address & ")"
AndGate = AndGate & "*" & c.Address
Next
AndOfNots = Mid(AndOfNots, 2)
AndGate = Mid(AndGate, 2)
'Now all we want is (Not(AndGate) AND Not(AndOfNots))
ArithmeticXOR = "(1 - " & AndOfNots & ")*(1 - " & AndGate & ")"
If EvaluateEquation Then
ArithmeticXOR = Application.Evaluate(xor2)
End If
End Function
Run Code Online (Sandbox Code Playgroud)
任何一个k
可以扩展这些相同的方法以允许k个条件中的任何n个数量合格为真.
例如,在三个变量a,b和c中,如果您愿意接受任何两个条件,那么您需要a&b或a&c或b&c.这可以从复合逻辑算术建模......
(a && b) || (a && c) || (b && c) ...
并应用我们的翻译......
1 - (1-ab)(1-ac)(1-bc)......
这可以扩展到k个条件中的任何n个数.有一种变量和指数组合的模式,但这会很长; 但是,您可以通过忽略二进制上下文的权限来简化.确切的模式取决于n与k的关系.对于n = k-1,其中k是被测试条件的总数,结果如下:
c1 + c2 + c3 ... ck - n*Π
其中c1到ck都是n变量组合.
例如,如果满足4个条件中的3个则为真
abc + abe + ace + bce - 3abce
这具有完美的逻辑意义,因为我们所拥有的是条件的加OR性AND减去重叠AND条件.
如果你开始看n = k-2,k-3等等.模式变得更复杂,因为我们有更多的重叠来减去.如果这完全扩展到n = 1的最小值,那么我们只得到一个常规OR条件.
小智 1
无论如何,“仅数学、算术表示”都不是正确的术语。您正在寻找的是一个从 IxI 到 I(整数域)的函数。
您希望此功能有哪些限制?只有线性代数吗?(+ , - , * , /) 那么就不可能模拟 XOR 运算符。
相反,如果您接受一些非线性运算符,例如 Max() Sgn() 等,则可以使用一些“更简单”的运算符来模拟 XOR 运算符。