# How to SWAP values of two variables without using a third variable (integer) ?

Many times I asked this particular question in the interview session and many people failed to answer. This is just to see the analytic ability of a candidate and how dynamic thinking they have. The logic is same for all programming language, so if you have the logic right then you can answer it for any particular language such as PHP, JAVA, C++, C etc. but in this tutorial We will use PHP 🙂

What if we can use the third variable:

\$a = 100;

\$b = 200;

now we need to swap the values so that \$a becomes 2oo and \$b becomes 1oo.

the basic technique is to introduce a third variable \$tmp

\$tmp = \$a;

\$a = \$b;

\$b = \$tmp;

isn’t it straight forward. introducing a third variable it is so easy. but what will be our approach if there is no third variable? is it possible?

The answer is a big YES. There are several ways and they fall in two types of solution.

1. Arithmetic operation

2. Bitwise operation.

Arithmetic Operation:

we can use addition-deduction and multiply-division method to solve the problem.

let’s see how addition – deduction method works.

<?php

\$x = 10;

\$y = 20;
\$x = \$x+\$y;
\$y = \$x – \$y;
\$x = \$x – \$y;
?>

it is also very simple, isn’t it. first we are adding the two numbers and keeping the result in one of the variable. in the above example its \$x and it contains \$x+\$y. in the second operation, we are deducting \$y from \$x and assigning it to \$y. now lets break the equation logically

\$y = \$x – \$y => \$x + \$y – \$y => \$x  // [ since \$x = \$x+\$y ]

cool, we swapped one of the variable. and following the same operation we are swapping the second one in the third line. so that’s it. It is so easy but just requires some logical thinking. do not try to memorize it rather than understand the simple logic here.

now the multiply-division method:

<?php

\$x = 10;

\$y = 20;
\$x = \$x*\$y;
\$y = \$x / \$y;
\$x = \$x / \$y;
?>

it is same as the addition-deduction method and logic is similar.

now do we see any problem in the above logic? that is the question i ask if someone can answer the question correctly and show me the above solution. 🙂

the answer for that is very simple, it is the number overflow as we always have upper limit for integers. so when we add or multiply two big numbers then the result can cause overflow and might not show desired results.

so what can be a good solution with keeping the overflow fact in mind? the answer is bitwise operation

Bitwise operation:

in order to swap two values we can use the XOR bitwise operator.

Note: A bitwise exclusive or takes two bit patterns of equal length and performs the logical XOR operation on each pair of corresponding bits. The result in each position is 1 if the two bits are different, and 0 if they are the same

the algorithm is

x = x XOR y

y = x XOR y

x = x XOR y

if we write them in computer language using caret (^) then it will look like

x = x ^ y

y = x ^ y

x = x ^ y

in shorter version:

x ^= y

y ^= x

x ^= y

in one line

x ^= y ^= x ^= y

so here is the command in php:

\$x ^= \$y ^= \$x ^= \$y

now how it works:

so now we know how to swap two values without using a third variable. ask me any questions you have 🙂