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  

C Bitwise Operators Programs »


Related Programs

Comments and Discussions!

Load comments ↻






Copyright © 2024 www.includehelp.com. All rights reserved.