 Open in App
Not now

# Swap Two Variables in One Line

• Difficulty Level : Easy
• Last Updated : 21 Jun, 2022

We have discussed different approaches to swap two integers without the temporary variable. How to swap into a single line without using the library function?
1) Python: In Python, there is a simple and syntactically neat construct to swap variables, we just need to write “x, y = y, x”.
2) C/C++: Below is one generally provided classical solution:

```// Swap using bitwise XOR (Wrong Solution in C/C++)
x ^= y ^= x ^= y; ```

The above solution is wrong in C/C++ as it causes undefined behavior (the compiler is free to behave in any way). The reason is, modifying a variable more than once in an expression causes undefined behavior if there is no sequence point between the modifications.
However, we can use a comma to introduce sequence points. So the modified solution is

```// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);```

3) Java: In Java, rules for subexpression evaluations are clearly defined. The left-hand operand is always evaluated before the right-hand operand. In Java, the expression “x ^= y ^= x ^= y;” doesn’t produce the correct result according to Java rules. It makes x = 0. However, we can use “x = x ^ y ^ (y = x);” Note the expressions are evaluated from left to right. If x = 5 and y = 10 initially, the expression is equivalent to “x = 5 ^ 10 ^ (y = 5);”. Note that we can’t use this in C/C++ as in C/C++, it is not defined whether the left operand or right operand is executed by any operator (See this for more details).

4) JavaScript: Using destructing assignment, we can simply achieve swapping using this one line.

`[x,y]=[y,x]`

## C

 `// C program to swap two variables in single line``#include ``int` `main()``{``    ``int` `x = 5, y = 10;``    ``(x ^= y), (y ^= x), (x ^= y);``    ``printf``(``"After Swapping values of x and y are %d %d"``, x,``           ``y);``    ``return` `0;``}`

## C++

 `// C++ code to swap using XOR``#include ` `using` `namespace` `std;` `int` `main()``{``    ``int` `x = 5, y = 10;``    ``// Code to swap 'x'  and 'y'``    ``// to swap two numbers in one``    ``// line``     ``x = x ^ y, y = x ^ y, x = x ^ y;``    ``// printing the swapped variables``    ``cout << ``"After Swapping: x = "``         ``<< x << ``", y= "` `<< y;``    ``return` `0;``}`

## Java

 `// Java program to swap two variables in a single line``class` `GFG {``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `x = ``5``, y = ``10``;``        ``x = x ^ y ^ (y = x);``        ``System.out.println(``            ``"After Swapping values"``            ``+``" of x and y are "` `+ x``            ``+ ``" "` `+ y);``    ``}``}`

## Python3

 `# Python program to swap two variables in a single line``x ``=` `5``y ``=` `10``x, y ``=` `y, x``print``(``"After Swapping values of x and y are"``, x, y)`

## C#

 `// C# program to swap two``// variables in single line``using` `System;` `class` `GFG {``    ``static` `public` `void` `Main()``    ``{``        ``int` `x = 5, y = 10;``        ``x = x ^ y ^ (y = x);``        ``Console.WriteLine(``"After Swapping values "``                          ``+ ``"of x and y are "` `+ x + ``" "``                          ``+ y);``    ``}``}` `// This code is contributed by aj_36`

## PHP

 ``

## Javascript

 ``

Output

`After Swapping values of x and y are 10 5`

Alternate Solutions:

1. Using swap(): C++ library function
2. b = (a + b) – (a = b);
3. a += b – (b = a);
4. a = a * b / (b = a)
5. a = a ^ b ^ (b = a)

Time complexity : O(1)
Auxiliary Space : O(1)