Q:

# C program to swap two Integers using Bitwise Operators

Write a C program to swap two integers using bitwise operators without using any temporary variable.

need an explanation for this answer? contact us directly to get an explanation for this answer

Algorithm:

1. Let n1 and n2 be two numbers to be swapped.
2. Update n1 to n1^n2, i.e., n1=n1^n2
3. Update n2 to n1^n2, i.e., n2=n1^n2 //n1 is already updated in previous step, use the updated value.
4. Again update n1 to n1^n2, i.e., n1=n1^n2 //n2 already updated in previous step.

This results in swapping as n1 contains new value of n2 and vice versa.

Reason:

```    n1=n1^n2; //statement1
n2=n1^n2; //statement2
n1=n1^n2; //statement3

At statement 2 replace n1 by stamen 1,
n2  = (n1^n2) ^ n2
= n1^ (n2^n2) //XOR follows associative property
= n1^0 // (n2^n2=0)
= n1

At statement 3 replace n1, n2 by statement 1, 2
n1  = (n1^n2) ^ n1 //n2=n1 just found previously
= (n2^n1) ^n1 //XOR follows commutative property
= n2^ (n1^n1)
= n2^ 0
= n2

Thus n1 & n2 is swapped
```

Example with explanation

```Let two numbers be
n1= 5 //0000 0101
n2= 8 //0000 1000

Let's perform the aforementioned steps:
1.  n1=n1^n2
n1= 0000 0101 ^ 0000 1000 = 0000 1101
2.  n2=n1^n2
n2= 0000 1101 ^ 0000 1000= 0000 0101 //5=n1(original value of n1) actually
3.  n1= n1^ n2
n1= 0000 1101 ^ 0000 0101 = 0000 1000 //8 =n2 (original value of n2) actually
```

### C implementation to swap two Integers using Bitwise Operators

``````#include <stdio.h>

int main()
{
int n1,n2;
printf("enter two numbers\n");
scanf("%d %d",&n1,&n2);
printf("before swapping...\n");
printf("first no is %d, second no %d\n",n1,n2);

//swapping using bitwise operators

n1=n1^n2;
n2=n1^n2;
n1=n1^n2;

//n1 & n2 is swapped
printf("after swapping...\n");
printf("first no is %d, second no %d\n",n1,n2);

return 0;
}``````

Output

```enter two numbers
5 7
before swapping...
first no is 5, second no 7
after swapping...
first no is 7, second no 5  ```

need an explanation for this answer? contact us directly to get an explanation for this answer