Subtraction of two numbers using 2’s Complement

13 Jun, 2022
Given two numbers a and b. The task is to subtract b from a by using 2’s Complement method.Note: Negative numbers represented as 2’s Complement of Positive Numbers.For example, -5 can be represented in binary form as 2’s Complement of 5. Look at the image below: 
Examples: 
Input : a = 2, b = 3
Output : -1

Input : a = 9, b = 7
Output : 2 
To subtract b from a. Write the expression (a-b) as:  
(a - b) = a + (-b)
Now (-b) can be written as (2’s complement of b). So the above expression can be now written as:  
(a - b) = a + (2's complement of b)
So, the problem now reduces to “Add a to the 2’s complement of b“. The below image illustrates the above method of subtraction for the first example where a = 2 and b = 3. 
Below is the implementation of the above method: 
C++
Java
Python3
C#
PHP
Javascript
#include <bits/stdc++.h>using namespace std; // function to subtract two values// using 2's complement methodint Subtract(int a, int b){    int c;     // ~b is the 1's Complement of b    // adding 1 to it make it 2's Complement    c = a + (~b + 1);     return c;} // Driver codeint main(){    int a = 2, b = 3;     cout << Subtract(a, b)<<endl;     a = 9; b = 7;    cout << Subtract(a, b);     return 0;}
class GFG{ // function to subtract two values// using 2's complement methodstatic int Subtract(int a, int b){    int c;     // ~b is the 1's Complement    // of b adding 1 to it make    // it 2's Complement    c = a + (~b + 1);     return c;} // Driver codepublic static void main(String[] args){    int a = 2, b = 3;         System.out.println(Subtract(a, b));         a = 9; b = 7;    System.out.println(Subtract(a, b));}} // This code is contributed// by ChitraNayal
# python3 program of subtraction of# two numbers using 2's complement . # function to subtract two values# using 2's complement methoddef Subtract(a,b):         # ~b is the 1's Complement of b    # adding 1 to it make it 2's Complement    c = a + (~b + 1)    return c # Driver codeif __name__ == "__main__" :     # multiple assignments    a,b = 2,3    print(Subtract(a,b))     a,b = 9,7    print(Subtract(a,b))
// C# program of subtraction of// two numbers using 2's complementusing System; class GFG{// function to subtract two values// using 2's complement methodstatic int Subtract(int a, int b){    int c;     // ~b is the 1's Complement    // of b adding 1 to it make    // it 2's Complement    c = a + (~b + 1);     return c;} // Driver codestatic void Main(){    int a = 2, b = 3;         Console.WriteLine(Subtract(a, b));         a = 9; b = 7;    Console.WriteLine(Subtract(a, b));}} // This code is contributed// by mits
<?php// function to subtract two values// using 2's complement methodfunction Subtract($a, $b){     // ~b is the 1's Complement    // of b adding 1 to it make    // it 2's Complement    $c = $a + (~$b + 1);     return $c;} // Driver code$a = 2;$b = 3; echo Subtract($a, $b) . "\n"; $a = 9;$b = 7;echo Subtract($a, $b) . "\n"; // This code is contributed// by ChitraNayal?>
<script> // Function to subtract two values// using 2's complement methodfunction Subtract(a, b){    var c;     // ~b is the 1's Complement of b    // adding 1 to it make it 2's Complement    c = a + (~b + 1);     return c;} // Driver codevar a = 2, b = 3;document.write( Subtract(a, b) + "<br>"); a = 9; b = 7;document.write( Subtract(a, b)); // This code is contributed by itsok </script>
-1
2
Time complexity – O(nlog2(n))Auxiliary Space – O(1)
Method 2: Basic Approach or Brute Force Approach
Subtraction of two Binary Numbers, subtract two binary numbers using 2’s Complement method. 
Step-1: Find the 2’s complement of the subtrahend. 
Step-2: Add the first number and 2’s complement of the subtrahend. 
Step-3: If the carry is produced, discard the carry. If there is no carry then take the 2’s complement of the result. 
Below is the implementation of the above approach.
C++
Java
Python3
C#
Javascript
//C++ code for above approach#include<iostream>#include<bits/stdc++.h>using namespace std; // Program to subtractvoid Subtract(int n, int a[],                       int b[]){         // 1's Complement    for(int i = 0; i < n; i++)      {                 //Replace 1 by 0        if(b[i] == 1)        {            b[i] = 0;        }               //Replace 0 by 1        else        {            b[i] = 1;        }    }       //Add 1 at end to get 2's Complement    for(int i = n - 1; i >= 0; i--)    {                              if(b[i] == 0)        {            b[i] = 1;            break;        }        else        {            b[i] = 0;        }    }       // Represents carry     int t = 0;                               for(int i = n - 1; i >= 0; i--)    {                 // Add a, b and carry        a[i] = a[i] + b[i] + t;                // If a[i] is 2        if(a[i] == 2)        {            a[i] = 0;            t = 1;         }               // If a[i] is 3        else if(a[i] == 3)        {            a[i] = 1;            t = 1;        }        else            t = 0;    }       cout << endl;         // If carry is generated    // discard the carry    if(t==1)    {                     // print the result       for(int i = 0; i < n; i++)       {                     // Print the result         cout<<a[i];             }    }       // if carry is not generated    else                    {                                  // Calculate 2's Complement        // of the obtained result        for(int i = 0; i < n; i++)        {                             if(a[i] == 1)                a[i] = 0;            else                a[i] = 1;        }        for(int i = n - 1; i >= 0; i--)        {            if(a[i] == 0)            {                a[i] = 1;                break;            }        else            a[i] = 0;        }               // Add -ve sign to represent        cout << "-";                       // -ve result        // Print the resultant array        for(int i = 0; i < n; i++)        {            cout << a[i];           }    } } // Driver Codeint main(){    int n;    n = 5;              int a[] = {1, 0, 1, 0, 1},        b[] = {1, 1, 0, 1, 0};         Subtract(n,a,b);    return 0;}
// Java code for above approachimport java.io.*; class GFG{     // Program to subtractstatic void Subtract(int n, int a[], int b[]){         // 1's Complement    for(int i = 0; i < n; i++)       {                 // Replace 1 by 0        if (b[i] == 1)         {            b[i] = 0;        }                 // Replace 0 by 1        else        {            b[i] = 1;         }    }         // Add 1 at end to get 2's Complement    for(int i = n - 1; i >= 0; i--)     {                               if (b[i] == 0)        {            b[i] = 1;            break;        }        else        {            b[i] = 0;        }    }         // Represents carry      int t = 0;                                for(int i = n - 1; i >= 0; i--)    {                   // Add a, b and carry        a[i] = a[i] + b[i] + t;                   // If a[i] is 2        if (a[i] == 2)        {            a[i] = 0;            t = 1;        }                 // If a[i] is 3        else if (a[i] == 3)        {            a[i] = 1;            t = 1;        }        else            t = 0;    }         System.out.println();           // If carry is generated    // discard the carry     if (t == 1)     {                         // Print the result         for(int i = 0; i < n; i++)        {                         // Print the result            System.out.print(a[i]);               }    }         // If carry is not generated    else                    {                 // Calculate 2's Complement        // of the obtained result        for(int i = 0; i < n; i++)         {                              if (a[i] == 1)                a[i] = 0;            else                a[i] = 1;        }        for(int i = n - 1; i >= 0; i--)        {            if (a[i] == 0)            {                a[i] = 1;                break;            }        else            a[i] = 0;        }                 // Add -ve sign to represent        System.out.print("-");                          // -ve result        // Print the resultant array        for(int i = 0; i < n; i++)        {            System.out.print(a[i]);            }    }  }   // Driver Codepublic static void main (String[] args){    int n;    n = 5;               int a[] = {1, 0, 1, 0, 1};    int b[] = {1, 1, 0, 1, 0};       Subtract(n, a, b);}} // This code is contributed by avanitrachhadiya2155
# Python implementation of above approach # Program to subtractdef Subtract(n, a, b):         # 1's Complement    for i in range(n):                 # Replace 1 by 0        if (b[i] == 1):            b[i] = 0                 # Replace 0 by 1        else:            b[i] = 1         # Add 1 at end to get 2's Complement    for i in range(n - 1, -1, -1):         if (b[i] == 0):            b[i] = 1            break        else:            b[i] = 0         # Represents carry    t = 0               for i in range(n - 1, -1, -1):                     # Add a, b and carry        a[i] = a[i] + b[i] + t                 # If a[i] is 2        if (a[i] == 2):            a[i] = 0            t = 1                 # If a[i] is 3        elif (a[i] == 3):            a[i] = 1            t = 1        else:            t = 0         print()             # If carry is generated    # discard the carry    if (t == 1):                 # Print the result        for i in range(n):                         # Print the result            print(a[i],end="")            # If carry is not generated    else:                            # Calculate 2's Complement        # of the obtained result        for i in range(n):                       if (a[i] == 1):                a[i] = 0            else:                a[i] = 1        for i in range(n - 1, -1, -1):            if (a[i] == 0):                a[i] = 1                break            else:                a[i] = 0                 # Add -ve sign to represent        print("-",end="")                 # -ve result        # Print the resultant array        for i in range(n):            print(a[i],end="")     # Driver Coden = 5a=[1, 0, 1, 0, 1]b=[1, 1, 0, 1, 0]Subtract(n, a, b) # This code is contributed by shinjanpatra
// C# code for above approachusing System; class GFG{     // Program to subtractstatic void Subtract(int n, int[] a, int[] b){         // 1's Complement    for(int i = 0; i < n; i++)       {                 // Replace 1 by 0        if (b[i] == 1)         {            b[i] = 0;        }                  // Replace 0 by 1        else        {            b[i] = 1;         }    }          // Add 1 at end to get 2's Complement    for(int i = n - 1; i >= 0; i--)     {                               if (b[i] == 0)        {            b[i] = 1;            break;        }        else        {            b[i] = 0;        }    }          // Represents carry      int t = 0;                                for(int i = n - 1; i >= 0; i--)    {                 // Add a, b and carry        a[i] = a[i] + b[i] + t;                    // If a[i] is 2        if (a[i] == 2)        {            a[i] = 0;            t = 1;        }                  // If a[i] is 3        else if (a[i] == 3)        {            a[i] = 1;            t = 1;        }        else            t = 0;    }          Console.WriteLine();            // If carry is generated    // discard the carry     if (t == 1)     {                          // Print the result         for(int i = 0; i < n; i++)        {                          // Print the result            Console.Write(a[i]);               }    }          // If carry is not generated    else                   {                  // Calculate 2's Complement        // of the obtained result        for(int i = 0; i < n; i++)         {                              if (a[i] == 1)                a[i] = 0;            else                a[i] = 1;        }        for(int i = n - 1; i >= 0; i--)        {            if (a[i] == 0)            {                a[i] = 1;                break;            }            else                a[i] = 0;        }                  // Add -ve sign to represent        Console.Write("-");                           // -ve result        // Print the resultant array        for(int i = 0; i < n; i++)        {            Console.Write(a[i]);            }    }  }    // Driver Codestatic public void Main(){    int n;    n = 5;               int[] a = {1, 0, 1, 0, 1};    int[] b = {1, 1, 0, 1, 0};     Subtract(n, a, b);}} // This code is contributed by rag2127
<script>// Javascript code for above approach         // Program to subtract    function Subtract(n,a,b)    {        // 1's Complement    for(let i = 0; i < n; i++)      {                  // Replace 1 by 0        if (b[i] == 1)        {            b[i] = 0;        }                  // Replace 0 by 1        else        {            b[i] = 1;        }    }          // Add 1 at end to get 2's Complement    for(let i = n - 1; i >= 0; i--)    {                              if (b[i] == 0)        {            b[i] = 1;            break;        }        else        {            b[i] = 0;        }    }          // Represents carry     let t = 0;                               for(let i = n - 1; i >= 0; i--)    {                    // Add a, b and carry        a[i] = a[i] + b[i] + t;                   // If a[i] is 2        if (a[i] == 2)        {            a[i] = 0;            t = 1;        }                  // If a[i] is 3        else if (a[i] == 3)        {            a[i] = 1;            t = 1;        }        else            t = 0;    }          document.write("<br>");            // If carry is generated    // discard the carry    if (t == 1)    {                         // Print the result        for(let i = 0; i < n; i++)        {                          // Print the result            document.write(a[i]);              }    }          // If carry is not generated    else                   {                  // Calculate 2's Complement        // of the obtained result        for(let i = 0; i < n; i++)        {                             if (a[i] == 1)                a[i] = 0;            else                a[i] = 1;        }        for(let i = n - 1; i >= 0; i--)        {            if (a[i] == 0)            {                a[i] = 1;                break;            }        else            a[i] = 0;        }                  // Add -ve sign to represent        document.write("-");                          // -ve result        // Print the resultant array        for(let i = 0; i < n; i++)        {            document.write(a[i]);           }    }     }         // Driver Code    let n = 5;      let a=[1, 0, 1, 0, 1];    let b=[1, 1, 0, 1, 0];    Subtract(n, a, b);      // This code is contributed by patel2127</script>
-00101
Time complexity : O(N)
Auxiliary Space : O(1)
 
ankthon
ukasp
Mithun Kumar
manavgoswami001
avanitrachhadiya2155
rag2127
itsok
patel2127
sweetyty
as5853535
sooda367
shinjanpatra
devendrasalunke
Algorithms-Bit Algorithms
Bit Algorithms
complement
school-programming
C++ Programs
School Programming
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.