繁体   English   中英

JAVA - 按位异或赋值运算符如何在此给定解决方案中工作

[英]JAVA - How does the bitwise exclusive OR assignment operator work in this given solution

我最近在做一些编码挑战,这是其中一个问题。

给出了由N个整数组成的非空零索引数组A. 该数组包含奇数个元素,并且该数组的每个元素可以与具有相同值的另一个元素配对,除了一个未配对的元素。 找到不成对的价值。 例如,给定数组A:A [0] = 9 A [1] = 3 A [2] = 9 A [3] = 3 A [4] = 9 A [5] = 7 A [6] = 9功能应该返回7。

完成自己的工作后,我遇到了这个解决方案。

public int solution(int[] A) {
  int r = 0;
  for(int i=0;i<A.length;i++)
    r ^=A[i];

  return r;
}

我对这段代码感到惊讶。 我以前从未见过独有的OR赋值运算符,并且想知道这个解决方案是如何工作的。 如果有人能够引导我完成这个简单的代码并解释它是如何工作的那将是美妙的。

简而言之, A ^ B ^ B会给你回A 两个^B不需要是连续的:只要你有两次相同的XOR,就可以清除效果。 在您的问题中,由于值是成对的,因此通常相同的值将被异或两次,这对最终值没有影响,除了未配对的值。 所以最终的结果将只是0 ^ thatUnPairedValue ,这简直就是thatUnPairedValue

对于二进制系统,两个相同数字之间的xor ^导致零

0^0=0
1^0=1
1^1=0

这同样适用于任何系统,在您的示例中,9的二进制表示为1001 ,因此xor ^介于99之间

 1001
 1001
 ----
 0000
 ----

所以在你的例子中, (9^9)^(9^9)得零,而(3^3)得零,你留下0^77

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM