单个值的按位XOR校验和?

时间:2020-02-26 04:21:26

标签: python

我正在对数组进行按位校验和。

0^1^2^3^4^6 == 2.

17^18^19^20^21^22^23^25^26^29 == 14.

12^ == ?

但是有时可能只有一个值。

单个值相当于数组校验和?

1 个答案:

答案 0 :(得分:1)

摘要:X^0 == X对应任何X,这就是为什么12的结果等于12^0,即12。


我在数学上并不精确,但是对于操作而言,可能存在一个“中性”值,什么也不做:

  • 加法为0:X+0 == X
  • 对于乘法,它是1:X*1 == X
  • 对于AND(逻辑,按位),它是True或位值1

您始终可以插入中性值而不更改结果。这意味着例如空列表的总和为0,乘积为1。您自然会以该值作为sum(alist)product(alist)实现中的起点:

total = 0; for x in alist: total = total + x

prod = 1; for x in alist: prod = prod * x

回到您的问题,XOR的中性值为0。我们将xor写为:

def xor(*args):
    result = 0
    for x in args:
        result ^= x
    return result

然后:

>>> xor(17,18,19,20,21,22,23,25,26,29)
14
>>> xor(0,1,2,3,4,6)
2
>>> xor()
0
>>> xor(12)
12
相关问题