Programming Tutorials and Interview Questions

Swapping two numbers using bitwise operator XOR is a programming trick that is usually asked in technical interviews. It does not use a third temp variable for swapping values between two variables. This solution only works for unsigned integer types. It won't work for floating point, pointers, and struct/union types.

Here, we are using XOR (`^`

) operator to swap two integers. If you don't get confused the XOR operator returns the second number if the result of two XOR-ed numbers is again XOR-ed with first original number, and returns the first number if the result of two XOR-ed numbers is again XOR-ed with second original number.

Now let's understand it by an example, imagine we have two numbers 5 and 7. The XOR of 5 and 7 (`5 ^ 7`

) will be 2, further, if we XOR 2 with 5, we will get 7 or if we XOR 2 with 7 we will get 5. This trick helps in swapping the numbers.

In the following C program we swap the values of two variables by XORing these variables with each other. We have `n1 = 5`

and `n2 = 7`

. In first step, we do `n1 = n1 ^ n2;`

which results `2`

. This result is stored back in `n1`

. In second step, we do `n2 = n1 ^ n2;`

that is `2 ^ 7`

. It will return `5`

, which gets assigned to `n2`

. So, till now one number got swapped. In third step, we do `n1 = n1 ^ n2;`

that is `2 ^ 5`

. It will return `7`

, which gets assigned to `n1`

. Hereby, `n1`

and `n2`

are swapped.

/* C program to swap two integers using bitwise operators */ #include <stdio.h> int main() { int n1 = 5, n2 = 7; printf("Before swap: n1: %d \t n2: %d\n", n1, n2); n1 = n1 ^ n2; n2 = n1 ^ n2; n1 = n1 ^ n2; printf("After swap: n1: %d \t n2: %d\n", n1, n2); return 0; } OUTPUT ====== Before swap: n1: 5 n2: 7 After swap: n1: 7 n2: 5

Following is another C program that swaps two numbers using arithmetic operators without using a third temp variable.

/* C program to swap two integers using bitwise operators */ #include <stdio.h> int main() { int n1 = 5, n2 = 7; printf("Before swap: n1: %d \t n2: %d\n", n1, n2); n1 = n1 + n2; n2 = n1 - n2; n1 = n1 - n2; printf("After swap: n1: %d \t n2: %d\n", n1, n2); return 0; } OUTPUT ====== Before swap: n1: 5 n2: 7 After swap: n1: 7 n2: 5

Hope you have enjoyed reading this C program swapping two integers using bitwise XOR operator. Please do write us if you have any suggestion/comment or come across any error on this page. Thanks for reading!

The BBCâ€™s technology correspondent Rory Cellan-Jones gets a beer poured for him by a robotic barman - but how long does it take?

US politicians have voted to let ISPs gather and sell data about what Americans do online.

Customers who suffer poor service could get automatic payouts under Ofcom's plan.