首页 > 解决方案 > 单个值的按位异或校验和?

问题描述

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

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

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

12^ == ?

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

单个值的数组校验和等效于什么?

标签: python

解决方案


摘要:X^0 == X对于 any X,这就是 12 的结果等于 12 的原因12^0


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

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

等等

您始终可以插入中性值而不更改结果。sum(alist)这意味着例如,一个空的数字列表的总和为 0,乘​​积为 1。您自然会将该值用作orproduct(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

推荐阅读