# 1`s and 2`s complement of binary number

## For the given binary number, print its 1`s and 2`s complement.

1`s complement of a binary is another binary with all its bits changed from 1 to 0 and 0 to 1.
2`s complement is 1 added to the 1`s complement of the binary number.

### Examples

a) Input : 1010

Output : 1`s complement is 0101
2`s complement is 0110

b) Input : 1001

Output : 1`s complement is 0110
2`s complementis 0111

## Algorithm

1. Create a function flip which changes character to 0 if its 1 and 1 if its 0.

2. For 1`s complement,

a. Traverse the binary string.
b. For every character flip the string and add all of them.

3. For 2`s complement,

a. Traverse the 1`s complement.
b. If we get 1, we make them 0, keep going left.
c. If we get 0, make it 1 and end loop and return.

4. Print final 1`s complement and 2`s complement.

## C++ Program

```#include <bits/stdc++.h>

using namespace std;

//Function return '0' if '1', else return '0'
char flip(char c)
{
if (c == '0')
{
return '1';
}
else
{
return '0';
}

}
// Print 1's and 2's complement of binary number
// represented by "binary_string"
void PrintComplements(string binary_string)
{
int n = binary_string.length();
string ones, twos;
int i;
ones = twos = "";
//For 1`s complement flip all bits
for (i = 0; i < n; i++)
{
ones += flip(binary_string[i]);
}
//2`s complement
int k;
twos = ones;
for (k = n - 1;k >= 0;k--)
{
if (ones[k] == '1')//If its 1, make it 0 and move forward
{
twos[k] = '0';
}
else//If its 0, make it 1 and end loop
{
twos[k] = '1';
break;
}
}
//If no break, add one more one.
//Case: Adding 1 to 111 --> 1 + 111 = 1000
if(k == -1)
{
twos = '1' + twos;
}
cout<<"1's complement is: "<<ones<<endl;
cout<<"2's complement is: "<<twos<<endl;
}

//Main function
int main()
{
string binary_string = "1001";
cout<<"Input binary string is: "<<binary_string<<endl;
PrintComplements(binary_string);
return 0;
}```

Translate »