n个不同数字的XOR是否总是n个数字集合之外的数字?

时间:2017-02-21 22:29:22

标签: algorithm bit-manipulation bitwise-operators xor

假设您有n个不同的数字,它们之间可能存在差异,也可能没有差距。如果您要对所有数字进行异或,那么您得到的结果是否可以保证不是这些数字中的任何一个?

3 个答案:

答案 0 :(得分:3)

0b00 XOR 0b01 XOR 0b10 XOR 0b11 == 0b00

答案 1 :(得分:2)

没有

假设你的意思是数组中的第一个数字与第二个数字进行异或,并且结果与第3个相同,那么请考虑以下对应点:

[1,2,6,4]

使用二进制XOR,请参见下面的位表示:

100 XOR 010 = 110

110 XOR 011 = 101

101 XOR 001 = 100

数组中所有数字的XOR等于数组中的第一个数字。

答案 2 :(得分:1)

在这种情况下,数字0有一个非常有趣的特征:

a xor 0 = a, a != 0

这已经是问题答案的一半:
对任何集合{a, 0}, a != 0的内容进行异或将导致a结果。因此答案是否定的。

这可以进一步扩展:
对于任何一组数字N,其中存在属性MM = N \ {a}的子集xor(M) = 0xor(N) = a成立。 M具有以下属性:任何位位置上的1位数均为偶数:

N = {100, 010, 001, 011}
a = 100
M = {010, 001, 011}

    M:  0 1 0
        0 0 1
        0 1 1
count:  0 2 2

xor(N) = 100