Java中“ ^ =”运算符的目的是什么?

时间:2019-10-17 12:48:47

标签: java algorithm data-structures

我正在研究leetcode进行面试。关于查找数组中未配对的缺失编号存在一个问题。我通过使用HashSet解决了它。但是我看到以下解决方案比我的解决方案更有效。我的问题是a ^= nums[i]的逻辑XOR是什么意思?

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

6 个答案:

答案 0 :(得分:9)

您现在对所有答案都很熟悉,var teamResults = this.state.teamResults.MRData.RaceTable.Races.Results || []; return ( <div> <table> <thead> <tr> <th>Round</th> <th>Grand prix</th> <th>{this.state.teamResults.position}</th> <th>{this.state.teamResults.grid}</th> <th>Points</th> </tr> </thead> <tbody> {teamResults.map((race, i) => <TeamResults teamRacesData = {race} key={i}/>)} </tbody> </table> </div> ); 是XOR-and-becomes运算符。

由于 x ^ x == 0和x ^ 0 == x ,执行累加XOR会删除两次出现的重复项,并且结果将是唯一的一次出现。

^=

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

答案 1 :(得分:9)

  

^按位异或或XOR

它将遍历数组的所有元素并对所有元素执行XOR操作。这是Java中的一种复合赋值形式。

a ^= nums[i]

等效于

a = a ^ nums[i]

答案 2 :(得分:5)

  

^按位异或

(来自here

因此:

x ^= y;

仅仅是以下内容的“快捷方式”:

x = x ^ y;

答案 3 :(得分:3)

^运算符是the bitwise exclusive OR

当然,a ^= b等同于a = a ^ b

关于“按位异或”的含义,请参见例如Wikipedia

  

如果仅第一位为1或仅第二位为1,则每个位置的结果均为1;如果两个均为0或均为1,则结果为0。

答案 4 :(得分:1)

按位 XOR 运算符。
a ^ = nums [i] 是速记符号。
您可以将其写为 a = a ^ nums [i]


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

答案 5 :(得分:1)

^bitwise XOR operator

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)来解决问题。