We can swap two numbers using the XOR operator. The result of the bitwise XOR operator is 1 if the corresponding bits of two operands are opposite. It is denoted by **^**. To know more about working of XOR, refer to this tutorial: https://youtu.be/zkQuKuITyYo

```
#include<stdio.h>
int main()
{
int x = 5, y = 10;
printf("Before Swapping:\n");
printf("X is %d, Y is %d\n",x,y);
x = x^y ;
y = x^y ;
x = x^y ;
printf("After Swapping:\n");
printf("X is %d, Y is %d\n",x,y);
return 0;
}
```

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

It can also be written as,

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

As the order of evaluation of XOR operator is from right to left, so this logic can be written in one line.

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

How it works:

In this example,

x = 5, i.e., 0101 in binary

y = 10, i.e., 1010 in binary

therefore,

x = x^y; 0101^1010 = 1111 , i.e, 15 (x = 15)

y = x^y; 1111^1010 = 0101, i.e., 5. (y = 5)

x = x^y; 1111^0101 = 1010, i.e., 10, (x = 10)

Hence, we get, x = 10 and y = 5.