簡體   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