Subtraction of two numbers using 2’s Complement

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 Compliment 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“. 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <bits/stdc++.h>
using namespace std;
  
// function to subtract two values
// using 2's complement method
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 code
int main()
{
    int a = 2, b = 3;
  
    cout << Subtract(a, b)<<endl;
  
    a = 9; b = 7;
    cout << Subtract(a, b);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

class GFG 
{
  
// function to subtract two values
// using 2's complement method
static 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 code
public 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# python3 program of subtraction of
# two numbers using 2's complement .
  
# function to subtract two values
# using 2's complement method
def 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
if __name__ == "__main__" :
  
    # multiple assignments
    a,b = 2,3
    print(Subtract(a,b))
  
    a,b = 9,7
    print(Subtract(a,b))

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program of subtraction of
// two numbers using 2's complement
using System;
  
class GFG
{
// function to subtract two values
// using 2's complement method
static 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 code
static 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// function to subtract two values
// using 2's complement method
function 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
?>

chevron_right


Output

-1
2

Method 2: Basic Approach or Brute Force Approach

Subtraction of two Binary Numbers, subtract two binary numbers using 2’s Compliment method. 

Step-1:  Find the 2’s complement of the subtrahend. 

Step-2: Add 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

//CPP code for above approach
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
  
// Program to substract
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 Compliment
    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 Compliment
        // 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 represnt
        cout << "-";         
        
        // -ve result
        // Print the resultant array
        for(int i = 0; i < n; i++)
        {
            cout << a[i];    
        }
    }  
}
  
// Driver Code
int main()
{
    int n;
    n = 5;           
    int a[] = {1, 0, 1, 0, 1}, 
        b[] = {1, 1, 0, 1, 0};
      
    Subtract(n,a,b);
    return 0;
}

chevron_right


Output

-00101



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.