Cómo intercambiar el valor de dos variables enteras sin una intermedia

Cómo intercambiar el valor de dos variables enteras sin una intermedia es, en mi opinión, una mera curiosidad. Ahora bien, parece ser que en algunas entrevistas de trabajo aparece esta pregunta. Cuando se me ha pedido colaborar en el proceso de selección de un futuro compañero, no se me ha ocurrido incluir semejante pregunta en la prueba, pues no creo que esta sirva para apreciar la calidad de un programador. No obstante, si el presente artículo, además de presentar una anécdota, le sirve a alguien a superar una prueba, será un plus.

A continuación, voy a exponer dos métodos que, al usar Javascript para su implementación, el lector podrá ejecutarlos fácilmente presionando F12 para acceder a la consola.

Método matemático

Fácilmente lo podemos deducir con papel y lápiz:

var a = 3;
var b = 2;

a = a + b;
b = a - b; // Con el paso anterior y el actual es b = a + b - b
a = a - b; // a = a + b - a
console.log(a);
console.log(b);

Este método tiene una limitación con números muy grandes en los lenguajes que no manejan por si mismos el desbordamiento de enteros, que no es el caso de Javascript.

Método informático

Este es el mejor, consiste en usar el operador a nivel de bits XOR que, como se explica en el link, devuelve 1 si y solo si x e y son diferentes, mientras que en caso contrario retorna 0.

var x = 10;
var y = 3;

x = x^y;
y = x^y;
x = x^y;

console.log(x);
console.log(y);

Esta es la tabla de la verdad con los valores iniciales 10 y 3 para x e y, respectivamente:
Cómo intercambiar dos variables sin temporalAfirmé que es el mejor debido a que funcionará sin problemas en cualquier lenguaje, la única condición es que disponga de operadores a nivel de bits, algo que prácticamente todos cumplen.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.