Subtraction of two numbers using 2's Complement - GeeksforGeeks (2024)

Last Updated : 13 Mar, 2023

Improve

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:

Subtraction of two numbers using 2's Complement - GeeksforGeeks (1)

Examples:

Input : a = 2, b = 3Output : -1Input : a = 9, b = 7Output : 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.

Subtraction of two numbers using 2's Complement - GeeksforGeeks (2)

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>

Output

-12

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>

Output

-00101

Time complexity : O(N)

Auxiliary Space : O(1)



N

Naman_Garg

Improve

Next Article

Subtraction of two large numbers using 9's complement

Please Login to comment...

Subtraction of two numbers using 2's Complement - GeeksforGeeks (2024)
Top Articles
Wikiwand - Dr. Rajkumar
2022 Apple Trade P36
Funny Roblox Id Codes 2023
Golden Abyss - Chapter 5 - Lunar_Angel
Www.paystubportal.com/7-11 Login
Joi Databas
DPhil Research - List of thesis titles
Shs Games 1V1 Lol
Evil Dead Rise Showtimes Near Massena Movieplex
Steamy Afternoon With Handsome Fernando
Which aspects are important in sales |#1 Prospection
Detroit Lions 50 50
18443168434
Zürich Stadion Letzigrund detailed interactive seating plan with seat & row numbers | Sitzplan Saalplan with Sitzplatz & Reihen Nummerierung
Grace Caroline Deepfake
978-0137606801
Nwi Arrests Lake County
Justified Official Series Trailer
London Ups Store
Committees Of Correspondence | Encyclopedia.com
Pizza Hut In Dinuba
Jinx Chapter 24: Release Date, Spoilers & Where To Read - OtakuKart
Obsidian Guard's Cutlass
Marvon McCray Update: Did He Pass Away Or Is He Still Alive?
Mccain Agportal
Amih Stocktwits
Fort Mccoy Fire Map
Uta Kinesiology Advising
Kcwi Tv Schedule
What Time Does Walmart Auto Center Open
Nesb Routing Number
Olivia Maeday
Random Bibleizer
10 Best Places to Go and Things to Know for a Trip to the Hickory M...
Black Lion Backpack And Glider Voucher
Gopher Carts Pensacola Beach
Duke University Transcript Request
Lincoln Financial Field, section 110, row 4, home of Philadelphia Eagles, Temple Owls, page 1
Jambus - Definition, Beispiele, Merkmale, Wirkung
Netherforged Lavaproof Boots
Ark Unlock All Skins Command
Craigslist Red Wing Mn
D3 Boards
Jail View Sumter
Nancy Pazelt Obituary
Birmingham City Schools Clever Login
Thotsbook Com
Funkin' on the Heights
Vci Classified Paducah
Www Pig11 Net
Ty Glass Sentenced
Latest Posts
Article information

Author: Dong Thiel

Last Updated:

Views: 6007

Rating: 4.9 / 5 (79 voted)

Reviews: 86% of readers found this page helpful

Author information

Name: Dong Thiel

Birthday: 2001-07-14

Address: 2865 Kasha Unions, West Corrinne, AK 05708-1071

Phone: +3512198379449

Job: Design Planner

Hobby: Graffiti, Foreign language learning, Gambling, Metalworking, Rowing, Sculling, Sewing

Introduction: My name is Dong Thiel, I am a brainy, happy, tasty, lively, splendid, talented, cooperative person who loves writing and wants to share my knowledge and understanding with you.