Q:

C program to swap two Integers using Bitwise Operators

0

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.

All Answers

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

total answers (1)

This question belongs to these collections

Similar questions


need a help?


find thousands of online teachers now