使用自然数(或整数)运算以算术方式定义的 XOR

XOR arithmetically defined with operations for natural numbers (or integers)

我正在查看其他帖子以找到 XOR 的算术方法并找到 this,但无法应用于 python3 中的 自然数

琐碎的方法:

a = 12
b = 5
a^b ===> 9

使用其他帖子的公式:

a = 12
b = 5
a + b - a*b*(1 + a + b - (a*b))   ===> 2537

另一个选项:

a = 12
b = 5
(a-b)**2   ===> 49

当然,如果 a 和 b 为零或一,前面所有的方法都可以正常工作,就像其他帖子所说的那样,但是...

有没有函数可以用更算术的方式与自然数进行异或运算?

更新: 使用响应代码,我以更数学的方式构建了算术公式,只是让问题和答案更加清晰。谢谢!

首先,我们必须确定“算术”的定义。大英百科全书说它是“数学分支,其中研究数字、数字之间的关系以及对数字的观察并用于解决问题”。

根据这些基本规则,除了通常的 +-*/ 之外,以下规则也是合法的:

  • 整数除法
  • 模(除法的余数)
  • 最大和比较(数字之间的关系)

可以利用这些进行算术“位移”。

以下符合给定条件:

# By the problem statement, we're dealing with Natural numbers (Z+). No need to check for negatives.

def numBits(x):
    acc = 0
    while x > 0:
        x //= 2
        acc += 1
    return acc

def xor(a, b):
    acc = 0
    pos = 1
    for i in range(numBits(max(a, b))):
        acc += ((a + b) % 2) * pos
        a //= 2
        b //= 2
        pos *= 2

    return acc

# Prints 9
print(xor(12, 5))

Try it online!

“算术”可以包括求幂和对数以节省一些输入,但我将其保留为更基本的运算。

如果您正在寻找更单一的公式,如果您事先知道数字的位宽 n,则可以将上述循环展开为 n 项之和:

def xor(a, b):
    return ((a + b) % 2) + ((a // 2 + b // 2) % 2) * 2 + ... + ((a // 2 ** n + b // 2 ** n) % 2) * 2 ** n