【问题标题】:Is the XOR of n distinct numbers always a number outside the set of n numbers?n个不同数字的异或总是n个数字集合之外的数字吗?
【发布时间】:2017-02-21 22:29:22
【问题描述】:

假设你有 n 个不同的数字,它们之间可能有也可能没有间隔。如果对所有数字进行异或运算,得到的结果是否可以保证不是这 n 个数字中的任何一个?

【问题讨论】:

    标签: algorithm bit-manipulation bitwise-operators xor


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      没有。

      假设您的意思是数组中的第一个数字将与第二个数字进行异或运算,其结果将与第三个数字进行异或运算,依此类推,那么请考虑以下对位点:

      [1,2,6,4]

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

      100 异或 010 = 110

      110 异或 011 = 101

      101 异或 001 = 100

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

      【讨论】:

      • 顺序和实现并不重要,因为异或运算的交换性和关联性。但是很好的例子。
      【解决方案3】:

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

      a xor 0 = a, a != 0
      

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

      这可以进一步扩展:
      对于任何一组数字N,其中存在具有M = N \ {a}xor(M) = 0 属性的子集Mxor(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
      

      【讨论】:

        猜你喜欢
        • 2013-09-17
        • 1970-01-01
        • 1970-01-01
        • 2014-08-24
        • 2017-04-22
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多