Home » C programs » C bitwise operator's programs

C program to swap two Integers using Bitwise Operators

In this article, we are going to see how to swap two no using bitwise operator without using any temporary operators?
Submitted by Radib Kar, on January 06, 2019

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

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  




Comments and Discussions

Ad: Are you a blogger? Join our Blogging forum.



Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing » Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates

© https://www.includehelp.com some rights reserved.