# Subtraction of two numbers using 2’s Complement

• Difficulty Level : Hard
• Last Updated : 17 May, 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++

 `#include ``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)<

## 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

 ``

## Javascript

 ``
Output
```-1
2```

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``#include``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<= 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

 ``
Output
`-00101`

My Personal Notes arrow_drop_up