[英]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]
按位異或運算符。
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.