簡體   English   中英

Java中“^=”運算符的作用是什么?

[英]What is the purpose of “^= ”operator in Java?

為了面試,我正在學習 leetcode。 有一個關於在數組中查找未配對的缺失數字的問題。 我通過使用 HashSet 解決了它。 但我看到下面的解決方案比我的更有效。我的問題是a ^= nums[i]的邏輯 XOR 是什么意思?

int a = 0;
for (int i = 0; i < nums.length; i++) {
    a ^= nums[i];
}
return a;

您現在已經熟悉^=是 XOR-and-becomes 運算符的所有答案。

由於x ^ x == 0 和 x ^ 0 == x進行累積 XOR 將刪除兩次出現的重復項,結果將是唯一的一次出現。

3 ^ 5 ^ 3 ^ 7 ^ 5 = (3 ^ 3) ^ (5 ^ 5) ^ 7 = 0 ^ 0 ^ 7 = 7
3   6   5   2   7  <--- stepwise accumulated: 3=1+2, 5=1+4, 7=1+2+4

XOR 是一個有趣的交換和關聯 function “位不同” ,因為它不會丟失信息,

z = x ^ y   =>   y = z ^ x

^ 按位異或或異或

它將遍歷數組的所有元素,並對所有元素執行異或運算。它是 java 中復合賦值的一種形式。

a ^= nums[i]

這相當於

a = a ^ nums[i]

^ 按位異或

(從這里

因此:

x ^= y;

只是一個“捷徑”:

x = x ^ y;

^運算符是按位異或

當然, a ^= b等價於a = a ^ b

至於“按位異或”的含義,請參見例如Wikipedia

如果每個 position 中只有第一位為 1 或只有第二位為 1,則結果為 1,但如果兩者均為 0 或均為 1,則結果為 0。

按位異或運算符。
a ^= nums[i]是簡寫符號。
你可以把它寫成a = a ^ nums[i]


int a = 0;
    for (int i = 0; i < nums.length; i++) {
        a = a ^ nums[i];
    }
    return a;

^按位異或運算符

A | B | A XOR B
--+---+--------
0 | 0 |   0
0 | 1 |   1
1 | 0 |   1
1 | 1 |   0

在 Java 中,復合賦值是一種應用算術(或按位運算)並將值分配給左側變量的更短方法。 所以:

a ^= nums[i];

相當於:

a = a ^ nums[i];

我們利用兩個相等數的 XOR 相互抵消這一事實,並通過遍歷數組的元素並將它們相互 XOR(初始值為 0)來解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM