C Program To Convert Binary Number To 2’s Complement

A 2’s complement is used for binary operations in a computer system. In this example program, you are going to receive a binary string and convert the string into 2’s complement in two steps.

Advertisements

Learn the basics of C programming before you begin with the example. Skip this step if you already familiar with these concepts.

Problem Definition

The program ask for a input binary string. To convert this binary string in to 2’s complement, you need two steps.

  1. Convert the input binary string to 1’s complement.
  2. Add 1 to the 1’s complement obtained.

For example, suppose a the input string is 1100.

Step 1: The 1’s complement can be obtained by converting 1’s in to 0 and 0s into 1s.

\begin{aligned}1100 \hspace{3px}becomes \hspace{3px}0011\end{aligned}

Step 2: Add 1 to the 1’s complement to get 2’s complement of the number.

This step requires you to understand the binary math.

Advertisements
\begin{aligned}&1 + 1 = 10\\&1 + 0 = 1\\&0 + 1 = 1\\&0 + 0 = 0\end{aligned}

Using the above, you add 1 to the 1’s complement.

\begin{aligned}&\hspace{2px}0\hspace{2px}0\hspace{2px}1\hspace{2px}1\\&\hspace{8px} + 1 \\&----\\&\hspace{2px}0\hspace{2px}1\hspace{2px}0\hspace{2px}0\\&----\end{aligned}

Therefore,

The two’s complement of the number is 0100.

Flowchart

Flowchart - Program for 2's Complement
Flowchart – Program for 2’s Complement

Program Source Code

#include <stdio.h>
#include <stdlib.h>
void complement(char *a);
int main()
{
    char a[16];
    int i;
    printf("Enter the binary number:");
    gets(a);
for(i=0;a[i] != '\0';i++)
{
    if(a[i] != '0' && a[i]!= '1')
    {
    printf("The number entered is not a binary number"); 
    printf("Enter the correct number!");
    exit(0);
    }
}
complement(a);
getch();
system("PAUSE"); 
return 0;
}

void complement (char *a)
{
    int l, i, c = 0;
    char b[16];
    l = strlen(a);
/* Get the 1's complement of the given binary string */
    for(i = l-1;i>=0;i--)
    {
        if(a[i] == '0')
        {
        b[i]= '1';
        }
        else
        {
        b[i] = '0';
        }
    }
/* Add 1 to the 1's complement obtained in the previous step */
    for(i = l-1;i>=0;i--)
    {
    if(i == l-1)
    {
        if(b[i]== '0')
        {
        b[i] = '1';
        }
        else
        {
        b[i] == '0';
        c = 1;
        }
    }
    else
    {
        if(c==1 && b[i] == '0')
        {
        b[i] = '1';
        c = 0;
        }
        else if(c == 1 && b[i] == '1')
        {
        b[i] = '0';
        c = 1;
        }
    }
    }
b[l] = '\0';
printf("The 2's Complement is %s\n", b);
}

Output

Enter the binary number:11000101
The 2's Complement is 00111011

The given input string here is 11000101 and the final output is its 2’s complement.

\begin{aligned}11000101  \hspace{2px} has\hspace{2px}  1's \hspace{2px} complement \hspace{2px} of\hspace{2px}  00111010\end{aligned}

And if you add 1 to 1’s complement.

\begin{aligned}00111010 + 1 \rightarrow 00111011\end{aligned}

Therefore, the 2’s complement is 00111011.

Advertisements

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.