2.0 KiB
| date |
|---|
| 02-05-2024 |
The XOR Swap
The \text{XOR} swap algorithm is a clever programming trick used to swap the values of two variables without using a third temporary variable. This method exploits the properties of the \text{XOR} bitwise operation to perform the swap efficiently and in a mathematically elegant manner. The \text{XOR}, or "exclusive or," operation on two bits results in a value of 1 if and only if the bits are different; otherwise, the result is 0.
Algorithm
The algorithm is described as follows:
\begin{align*}
x_1 &= x_0 \oplus y_0 \\
y_1 &= x_1 \oplus y_0 \\
x_2 &= x_1 \oplus y_1
\end{align*}
Expanding this:
\begin{align*}
x_1 &= x_0 \oplus y_0 \\
y_1 &= (x_0 \oplus y_0) \oplus y_0 \\
x_2 &= (x_0 \oplus y_0) \oplus [(x_0 \oplus y_0) \oplus y_0]
\end{align*}
When changing the order of operations:
\begin{align*}
x_1 &= x_0 \oplus y_0 \\
y_1 &= (y_0 \oplus y_0) \oplus x_0 \\
x_2 &= (x_0 \oplus x_0) \oplus (y_0 \oplus y_0) \oplus y_0
\end{align*}
Based on the \text{XOR} properties, where we know that x \oplus x = 0 and that x \oplus 0 = x, 0 \oplus x = x, we arrive at the following conclusions, completing the swap process:
\begin{align*}
y_1 &= x_0 \\
x_2 &= y_0
\end{align*}
Practical Example
Suppose we have two numbers we want to swap:
\begin{align*}
x_0 = 101_2 \\
y_0 = 010_2
\end{align*}
[!info] Info Let
x_0andy_0denote the initial values of variablesxandy, respectively. Here, the subscript2indicates that the numbers are in base-2 (binary) notation.
Applying the XOR operation on these values:
\begin{align*}
x_1 &= 101 \oplus 010 \\
x_1 &= 111
\end{align*}
Continuing with the process:
\begin{align*}
y_1 &= 111 \oplus 010 \\
y_1 &= 101
\end{align*}
And finally:
\begin{align*}
x_2 &= 111 \oplus 101 \\
x_2 &= 010
\end{align*}
Thus, after applying the \text{XOR} swap algorithm, x_0 (originally 101) has been swapped with y_0 (originally 010), demonstrating the algorithm's effectiveness with a practical example.