【发布时间】:2017-02-21 22:29:22
【问题描述】:
假设你有 n 个不同的数字,它们之间可能有也可能没有间隔。如果对所有数字进行异或运算,得到的结果是否可以保证不是这 n 个数字中的任何一个?
【问题讨论】:
标签: algorithm bit-manipulation bitwise-operators xor
假设你有 n 个不同的数字,它们之间可能有也可能没有间隔。如果对所有数字进行异或运算,得到的结果是否可以保证不是这 n 个数字中的任何一个?
【问题讨论】:
标签: algorithm bit-manipulation bitwise-operators xor
0b00 XOR 0b01 XOR 0b10 XOR 0b11 == 0b00
【讨论】:
没有。
假设您的意思是数组中的第一个数字将与第二个数字进行异或运算,其结果将与第三个数字进行异或运算,依此类推,那么请考虑以下对位点:
[1,2,6,4]
使用二进制 XOR,请参见下面的位表示:
100 异或 010 = 110
110 异或 011 = 101
101 异或 001 = 100
数组中所有数字的异或等于数组中的第一个数字。
【讨论】:
在这种情况下,数字 0 有一个非常有趣的特点:
a xor 0 = a, a != 0
这已经是问题答案的一半了:
对任何集合{a, 0}, a != 0 的内容进行异或运算将产生a 作为结果。因此答案是否定的。
这可以进一步扩展:
对于任何一组数字N,其中存在具有M = N \ {a} 和xor(M) = 0 属性的子集M,xor(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
【讨论】: