我正在对数组进行按位校验和。
0^1^2^3^4^6 == 2.
17^18^19^20^21^22^23^25^26^29 == 14.
12^ == ?
但是有时可能只有一个值。
单个值相当于数组校验和?
答案 0 :(得分:1)
摘要:X^0 == X
对应任何X
,这就是为什么12的结果等于12^0
,即12。
我在数学上并不精确,但是对于操作而言,可能存在一个“中性”值,什么也不做:
X+0 == X
X*1 == X
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