XOR的数学(算术)表示

use*_*842 9 math logic boolean algebra xor

我花了最近5个小时寻找答案.即使我找到了许多答案,但他们却没有任何帮助.

我基本上寻找的是任何32位无符号整数的按位XOR运算符的数学,算术表示.

即使这听起来很简单,但没有人(至少看起来如此)设法找到这个问题的答案.

我希望我们能够集思广益,共同寻找解决方案.

谢谢.

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

这具有完美的逻辑意义,因为我们所拥有的是条件的加ORAND减去重叠AND条件.

如果你开始看n = k-2,k-3等等.模式变得更复杂,因为我们有更多的重叠来减去.如果这完全扩展到n = 1的最小值,那么我们只得到一个常规OR条件.

  • 你的回答对我很重要。 (2认同)

小智 1

无论如何,“仅数学、算术表示”都不是正确的术语。您正在寻找的是一个从 IxI 到 I(整数域)的函数。
您希望此功能有哪些限制?只有线性代数吗?(+ , - , * , /) 那么就不可能模拟 XOR 运算符。
相反,如果您接受一些非线性运算符,例如 Max() Sgn() 等,则可以使用一些“更简单”的运算符来模拟 XOR 运算符。