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

Please click Like if you loved this article?

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

Time complexity : O(n)

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.

Please click Like if you loved this article?

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;
}

Try It

See also
Reverse Bits

 

Please click Like if you loved this article?

Ads Blocker Image Powered by Code Help Pro
Ads Blocker Detected!!!

This website does not work properly with AdBlock. We have detected that you are using extensions to block ads. Please disable Adblocker to view the content.

Refresh