Subtraction of two numbers using 2's Complement
Last Updated :
13 Mar, 2023
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;
// 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;
}
Java
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
Python3
# 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))
C#
// 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
PHP
<?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
?>
JavaScript
<script>
// Function to subtract two values
// using 2's complement method
function 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 code
var 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>
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++
//C++ code for above approach
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
// Program to subtract
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;
}
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 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;
}
Java
// Java code for above approach
import java.io.*;
class GFG{
// Program to subtract
static 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 Code
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);
}
}
// This code is contributed by avanitrachhadiya2155
Python3
# Python implementation of above approach
# Program to subtract
def 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 Code
n = 5
a=[1, 0, 1, 0, 1]
b=[1, 1, 0, 1, 0]
Subtract(n, a, b)
# This code is contributed by shinjanpatra
C#
// C# code for above approach
using System;
class GFG{
// Program to subtract
static 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 Code
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);
}
}
// This code is contributed by rag2127
JavaScript
<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>
Time complexity : O(N)
Auxiliary Space : O(1)
Similar Reads
Subtraction of two large numbers using 9's complement Given two strings str1 and str2 of given lengths N and M respectively, each representing a large number, the task is to subtract one from the other using 9's complement.Examples: Input: N = 17, str1 = "12345678987654321", M = 11, str2 = "22324324343" Output: 12345656663329978Input: N = 20, Str1 = "1
12 min read
Subtraction of two large numbers using 10's complement Given two strings str1 and str2 of given lengths N and M respectively, each representing a large number, the task is to subtract one from the other using 10's complement. Example: Input: N = 10, str1 = â3434243434â, M = 14, str2 = â22324365765767â Output: 22320931522333 Input: N = 20, str1 = â123453
13 min read
Addition of two number using '-' operator The task is to Add two number using '-' operator. Examples: Input : 2 3Output : 5 Input : 10 20Output : 30 The idea is simple, we subtract -b from a. C++ // CPP program to add two numbers using // - operator. #include <bits/stdc++.h> using namespace std; // function to add two numbers. int add
2 min read
C++ Program to Implement Half Subtractor A Half Subtractor is a digital logic circuit that is used to subtract two single-bit binary numbers. In this article, we will learn how to implement the half subtractor logic in C++.What is a Half Subtractor?As told earlier, half subtractor is a digital logic circuit that makes the use of logical ga
2 min read
Why are negative numbers stored as 2's complement? When doing addition/subtraction on binary numbers in other representations we need to apply different logics (circuits) to perform addition and subtraction. In 2s-complement representation, we represent a positive number as it is and negative number by its corresponding 2s-complement, so we can use
1 min read