首页 > 解决方案 > Java中“^=”运算符的目的是什么?

问题描述

为了面试,我正在学习 leetcode。有一个关于在数组中查找未配对的缺失数字的问题。我通过使用 HashSet 解决了它。但是我看到了下面的解决方案,它比我的更有效。我的问题是逻辑异或的a ^= nums[i]含义是什么?

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

标签: javaalgorithmdata-structures

解决方案


您现在对^=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 是一个有趣的交换和关联函数“位不同”,因为它不会丢失信息,

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

推荐阅读