que - ¿Cuál es el propósito del operador "^=" en Java?
plataforma java (6)
^ Bitwise exclusivo OR o XOR
Atravesará todos los elementos de su matriz y realizará la operación XOR sobre todos los elementos. Es una forma de asignación compuesta en Java.
a ^= nums[i]
que es equivalente a
a = a ^ nums[i]
Estaba estudiando en Leetcode para una entrevista.
Hubo una pregunta sobre cómo encontrar el número faltante no emparejado en la matriz.
Lo resolví usando HashSet.
Pero vi la siguiente solución que es más eficiente que la mía. Mi pregunta es ¿qué significa la lógica XOR de
a ^= nums[i]
?
int a = 0;
for (int i = 0; i < nums.length; i++) {
a ^= nums[i];
}
return a;
Ahora está familiarizado con todas las respuestas que
^=
es el operador XOR-y-se convierte.
Como x ^ x == 0 y x ^ 0 == x hacer un XOR acumulativo eliminará los duplicados que ocurren dos veces y el resultado será la única ocurrencia única.
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 es una función conmutativa y asociativa interesante "el bit es diferente" ya que no pierde información,
z = x ^ y => y = z ^ x
El operador
^
es
el OR exclusivo bit a bit
.
Y, por supuesto,
a ^= b
es equivalente a
a = a ^ b
.
En cuanto a lo que significa "OR exclusivo bit a bit", consulte, por ejemplo, Wikipedia
El resultado en cada posición es 1 si solo el primer bit es 1 o solo el segundo bit es 1, pero será 0 si ambos son 0 o ambos son 1.
Operador
XOR
bit a
bit
.
a ^ = nums [i]
es la notación abreviada.
Puedes escribirlo como
a = a ^ nums [i]
int a = 0;
for (int i = 0; i < nums.length; i++) {
a = a ^ nums[i];
}
return a;
^
es el
operador XOR bit a bit
:
A | B | A XOR B
--+---+--------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
En Java, las asignaciones compuestas son una forma más corta de aplicar la aritmética (o la operación a nivel de bits) y asignar el valor a la variable en el lado izquierdo. Entonces:
a ^= nums[i];
es equivalente a:
a = a ^ nums[i];
Aprovechamos el hecho de que XOR de dos números iguales se cancela entre sí y resolvemos el problema iterando a través de los elementos de la matriz y XOR entre ellos (con un valor inicial de 0).