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.
Learn the basics of C programming before you begin with the example. Skip this step if you already familiar with these concepts.
- C Program Structure.
- How to install Turbo C++ 3.2 Compiler.
- C Data Types.
- C Flow Control Structures.
- C For Loop.
- C Functions.
Problem Definition
The program ask for a input binary string. To convert this binary string in to 2’s complement, you need two steps.
- Convert the input binary string to 1’s complement.
- 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.
\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
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.