C Program to swap two nibbles in a byte

In this blog post, we learn how to write a C Program to swap two nibbles in a byte?. We will write the C program to swap two nibbles in a byte using the Bitwise Operators. We will also create a function to swap two nibbles in a byte using call by reference and call by value.

What is nibble in a byte?

A nibble consists of four bits. There are two nibbles in a byte. For example, 64 is to be represented as 01000000 in a byte (or 8 bits). The two nibbles are (0100) and (0000).

 

What is nibble swapping mean?

Let’s understand the below example to understand the nibble swapping. Suppose you have a number that has values 100. The 100 is to be represented as 01100100 in a byte (or 8 bits). The two nibbles are 0110 and 0100. After swapping the nibbles, we get 01000110 which is 70 in decimal.

Input : 01100100
           ||
           \/      
Output : 01000110

 

C Program to swap two nibbles in a byte

We will use bitwise operators  &,  |, << and >> to swap the nibbles in a byte. Let see the C program to swap the nibbles,

#include <stdio.h>

int main()
{
    unsigned char data = 100;

    //swapping nibbles
    data = (((data & 0x0F)<<4) | ((data & 0xF0)>>4));

    printf("%u\n", data);

    return 0;
}

Output:

70

Code Explanation:

As we know binary of 100 is 01100100. To swap the nibble we split the operation in two parts, in first part we get last 4 bits and in second part we get first 4 bit of a byte.

First operation:

The expression “data & 0x0F” gives us the last 4 bits of data and result would be 00000100. Using bitwise left shift operator ‘<<‘, we shift the last four bits to the left 4 times and make the new last four bits as 0. The result after the shift is 01000000.

Second operation:

The expression “data & 0xF0” gives us first four bits of data and result would be 01100000. Using bitwise right shift operator ‘>>’ , we shift the digit to the right 4 times and make the first four bits as 0. The result after the shift is 00000110.

After completing the two operation we use the bitwise OR ‘|’ operation on them. After OR operation you will find that first nibble to the place of last nibble and last nibble to the place of first nibble.

01000000 | 00000110

        ||
        \/   
    
     01000110

 

 

C Program to swap two nibbles in a byte using macro:

 

#include <stdio.h>

//Macro to swap nibbles
#define SWAP_NIBBLES(data) ((data & 0x0F)<<4 | (data & 0xF0)>>4)

int main()
{
    unsigned char value = 100;

    //print after swapping
    printf("%u\n", SWAP_NIBBLES(value));

    return 0;
}

 

 

C Program to swap two nibbles in a byte using function:

 

Using Call by reference:

#include <stdio.h>


void swapNibbles(unsigned char *p)
{
    *p = ((*p & 0x0F)<<4 | (*p & 0xF0)>>4);
}

int main()
{
    unsigned char value = 100;

    //swapping the nibbles
    swapNibbles(&value);

    printf("%u\n", value);

    return 0;
}

Output:

70

 

Using Call by value:

#include <stdio.h>

unsigned char swapNibbles(unsigned char p) 
{ 
    return ( (p & 0x0F)<<4 | (p & 0xF0)>>4 ); 
}

int main()
{
    unsigned char value = 100;

    //swapping the nibbles
    printf("%u\n", swapNibbles(value););

    return 0;
}

Output:

70