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 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++
#include <bits/stdc++.h>
using namespace std;
int Subtract( int a, int b)
{
int c;
c = a + (~b + 1);
return c;
}
int main()
{
int a = 2, b = 3;
cout << Subtract(a, b)<<endl;
a = 9; b = 7;
cout << Subtract(a, b);
return 0;
}
|
Java
class GFG
{
static int Subtract( int a, int b)
{
int c;
c = a + (~b + 1 );
return c;
}
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));
}
}
|
Python3
def Subtract(a,b):
c = a + (~b + 1 )
return c
if __name__ = = "__main__" :
a,b = 2 , 3
print (Subtract(a,b))
a,b = 9 , 7
print (Subtract(a,b))
|
C#
using System;
class GFG
{
static int Subtract( int a, int b)
{
int c;
c = a + (~b + 1);
return c;
}
static void Main()
{
int a = 2, b = 3;
Console.WriteLine(Subtract(a, b));
a = 9; b = 7;
Console.WriteLine(Subtract(a, b));
}
}
|
PHP
<?php
function Subtract( $a , $b )
{
$c = $a + (~ $b + 1);
return $c ;
}
$a = 2;
$b = 3;
echo Subtract( $a , $b ) . "\n" ;
$a = 9;
$b = 7;
echo Subtract( $a , $b ) . "\n" ;
?>
|
Javascript
<script>
function Subtract(a, b)
{
var c;
c = a + (~b + 1);
return c;
}
var a = 2, b = 3;
document.write( Subtract(a, b) + "<br>" );
a = 9; b = 7;
document.write( Subtract(a, b));
</script>
|
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++
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
void Subtract( int n, int a[],
int b[])
{
for ( int i = 0; i < n; i++)
{
if (b[i] == 1)
{
b[i] = 0;
}
else
{
b[i] = 1;
}
}
for ( int i = n - 1; i >= 0; i--)
{
if (b[i] == 0)
{
b[i] = 1;
break ;
}
else
{
b[i] = 0;
}
}
int t = 0;
for ( int i = n - 1; i >= 0; i--)
{
a[i] = a[i] + b[i] + t;
if (a[i] == 2)
{
a[i] = 0;
t = 1;
}
else if (a[i] == 3)
{
a[i] = 1;
t = 1;
}
else
t = 0;
}
cout << endl;
if (t==1)
{
for ( int i = 0; i < n; i++)
{
cout<<a[i];
}
}
else
{
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;
}
cout << "-" ;
for ( int i = 0; i < n; i++)
{
cout << a[i];
}
}
}
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;
}
|
Java
import java.io.*;
class GFG{
static void Subtract( int n, int a[], int b[])
{
for ( int i = 0 ; i < n; i++)
{
if (b[i] == 1 )
{
b[i] = 0 ;
}
else
{
b[i] = 1 ;
}
}
for ( int i = n - 1 ; i >= 0 ; i--)
{
if (b[i] == 0 )
{
b[i] = 1 ;
break ;
}
else
{
b[i] = 0 ;
}
}
int t = 0 ;
for ( int i = n - 1 ; i >= 0 ; i--)
{
a[i] = a[i] + b[i] + t;
if (a[i] == 2 )
{
a[i] = 0 ;
t = 1 ;
}
else if (a[i] == 3 )
{
a[i] = 1 ;
t = 1 ;
}
else
t = 0 ;
}
System.out.println();
if (t == 1 )
{
for ( int i = 0 ; i < n; i++)
{
System.out.print(a[i]);
}
}
else
{
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 ;
}
System.out.print( "-" );
for ( int i = 0 ; i < n; i++)
{
System.out.print(a[i]);
}
}
}
public 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);
}
}
|
Python3
def Subtract(n, a, b):
for i in range (n):
if (b[i] = = 1 ):
b[i] = 0
else :
b[i] = 1
for i in range (n - 1 , - 1 , - 1 ):
if (b[i] = = 0 ):
b[i] = 1
break
else :
b[i] = 0
t = 0
for i in range (n - 1 , - 1 , - 1 ):
a[i] = a[i] + b[i] + t
if (a[i] = = 2 ):
a[i] = 0
t = 1
elif (a[i] = = 3 ):
a[i] = 1
t = 1
else :
t = 0
print ()
if (t = = 1 ):
for i in range (n):
print (a[i],end = "")
else :
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
print ( "-" ,end = "")
for i in range (n):
print (a[i],end = "")
n = 5
a = [ 1 , 0 , 1 , 0 , 1 ]
b = [ 1 , 1 , 0 , 1 , 0 ]
Subtract(n, a, b)
|
C#
using System;
class GFG{
static void Subtract( int n, int [] a, int [] b)
{
for ( int i = 0; i < n; i++)
{
if (b[i] == 1)
{
b[i] = 0;
}
else
{
b[i] = 1;
}
}
for ( int i = n - 1; i >= 0; i--)
{
if (b[i] == 0)
{
b[i] = 1;
break ;
}
else
{
b[i] = 0;
}
}
int t = 0;
for ( int i = n - 1; i >= 0; i--)
{
a[i] = a[i] + b[i] + t;
if (a[i] == 2)
{
a[i] = 0;
t = 1;
}
else if (a[i] == 3)
{
a[i] = 1;
t = 1;
}
else
t = 0;
}
Console.WriteLine();
if (t == 1)
{
for ( int i = 0; i < n; i++)
{
Console.Write(a[i]);
}
}
else
{
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;
}
Console.Write( "-" );
for ( int i = 0; i < n; i++)
{
Console.Write(a[i]);
}
}
}
static 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);
}
}
|
Javascript
<script>
function Subtract(n,a,b)
{
for (let i = 0; i < n; i++)
{
if (b[i] == 1)
{
b[i] = 0;
}
else
{
b[i] = 1;
}
}
for (let i = n - 1; i >= 0; i--)
{
if (b[i] == 0)
{
b[i] = 1;
break ;
}
else
{
b[i] = 0;
}
}
let t = 0;
for (let i = n - 1; i >= 0; i--)
{
a[i] = a[i] + b[i] + t;
if (a[i] == 2)
{
a[i] = 0;
t = 1;
}
else if (a[i] == 3)
{
a[i] = 1;
t = 1;
}
else
t = 0;
}
document.write( "<br>" );
if (t == 1)
{
for (let i = 0; i < n; i++)
{
document.write(a[i]);
}
}
else
{
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;
}
document.write( "-" );
for (let i = 0; i < n; i++)
{
document.write(a[i]);
}
}
}
let n = 5;
let a=[1, 0, 1, 0, 1];
let b=[1, 1, 0, 1, 0];
Subtract(n, a, b);
</script>
|
Time complexity : O(N)
Auxiliary Space : O(1)
Last Updated :
13 Mar, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...