Swap odd-odd and even-even


This program is for swapping odd bits with its next odd bits and even bits with its next even bits

LOGIC:
If the two bits are different, just toggle them

odd bit condition : i %2 ==0
even bit condition : i %2 ==1
as we start with index 0

Example:
Number 22
0 0 0 1 0 1 1 0
Swap odd = 0 1 0 0 0 0 1 1
Swap even= 0 1 0 0 1 0 0 1
Thus number is : 73

#include <stdio.h> 
#define MAX_BITS 8

int swap_bits(int num,int bit1 ,int bit2)
{
     num =num ^ (1 << bit1);
     num= num ^ (1 << bit2);
     return num;
}

int swap_odd_odd_even_even (int n) 
{ 
    for (int i= 0; i <=MAX_BITS -1 ;)
    { 
        /* if(i %2 ==0) JUST TO SWAP ODD BITS and if(i%2==1) JUST USE FOR EVEN BITS SWAPPING */ 
        /* this is for odd-odd swap */
        int bit1    = (n >> i) & 1;
        int bit2    = (n >> i+2)& 1;
        
        if(bit1 !=bit2)
        n = swap_bits(n,i,i+2);
         
        /* This is for even-even swap */
        int j=i+1;
        bit1    = (n >> j) & 1;
        bit2    = (n >> j+2)& 1;
        
        if(bit1 !=bit2)
         n = swap_bits(n,j,j+2);
       
        i=i+4;
    }
            
  return n;
} 
  
int main() 
{ 
    int n = 22; 
    printf("\n The result after swapping is: %d",swap_odd_odd_even_even(n)); 
    return 0; 
} 

Output:

The result after swapping is: 73


Categories: C Language

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: