Skip to content
Related Articles

Related Articles

Improve Article

Subtract two numbers without using arithmetic operators

  • Difficulty Level : Hard
  • Last Updated : 07 Aug, 2021

Write a function subtract(x, y) that returns x-y where x and y are integers. The function should not use any of the arithmetic operators (+, ++, –, -, .. etc). 
The idea is to use bitwise operators. Addition of two numbers has been discussed using Bitwise operators. Like addition, the idea is to use subtractor logic. 

The truth table for the half subtractor is given below. 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

X     Y     Diff     Borrow
0     0     0     0
0     1     1     1
1     0     1     0
1     1     0     0

From the above table one can draw the Karnaugh map for “difference” and “borrow”.
So, Logic equations are: 



    Diff   = y ⊕ x
    Borrow = x' . y 

Source: Wikipedia page for subtractor

Following is implementation based on above equations.  

C++




// C++ program to Subtract two numbers
// without using arithmetic operators
#include <iostream>
using namespace std;
 
int subtract(int x, int y)
{
    // Iterate till there
    // is no carry
    while (y != 0)
    {
        // borrow contains common
        // set bits of y and unset
        // bits of x
        int borrow = (~x) & y;
 
        // Subtraction of bits of x
        // and y where at least one
        // of the bits is not set
        x = x ^ y;
 
        // Borrow is shifted by one
        // so that subtracting it from
        // x gives the required sum
        y = borrow << 1;
    }
    return x;
}
 
// Driver Code
int main()
{
    int x = 29, y = 13;
    cout << "x - y is " << subtract(x, y);
    return 0;
}
 
// This code is contributed by shivanisinghss2110

C




// C program to Subtract two numbers
// without using arithmetic operators
#include<stdio.h>
 
int subtract(int x, int y)
{
    // Iterate till there
    // is no carry
    while (y != 0)
    {
        // borrow contains common
        // set bits of y and unset
        // bits of x
        int borrow = (~x) & y;
 
        // Subtraction of bits of x
        // and y where at least one
        // of the bits is not set
        x = x ^ y;
 
        // Borrow is shifted by one
        // so that subtracting it from
        // x gives the required sum
        y = borrow << 1;
    }
    return x;
}
 
// Driver Code
int main()
{
    int x = 29, y = 13;
    printf("x - y is %d", subtract(x, y));
    return 0;
}

Java




// Java Program to subtract two Number
// without using arithmetic operator
import java.io.*;
 
class GFG
{
    static int subtract(int x, int y)
    {
         
    // Iterate till there
    // is no carry
    while (y != 0)
    {
        // borrow contains common
        // set bits of y and unset
        // bits of x
        int borrow = (~x) & y;
 
        // Subtraction of bits of x
        // and y where at least one
        // of the bits is not set
        x = x ^ y;
 
        // Borrow is shifted by one
        // so that subtracting it from
        // x gives the required sum
        y = borrow << 1;
    }
     
    return x;
}
     
    // Driver Code
    public static void main (String[] args)
    {
        int x = 29, y = 13;
         
        System.out.println("x - y is " +
                        subtract(x, y));
    }
}
 
// This code is contributed by vt_m

Python3




def subtract(x, y):
 
    # Iterate till there
    # is no carry
    while (y != 0):
     
        # borrow contains common
        # set bits of y and unset
        # bits of x
        borrow = (~x) & y
         
        # Subtraction of bits of x
        # and y where at least one
        # of the bits is not set
        x = x ^ y
 
        # Borrow is shifted by one
        # so that subtracting it from
        # x gives the required sum
        y = borrow << 1
     
    return x
 
 
# Driver Code
x = 29
y = 13
print("x - y is",subtract(x, y))
 
# This code is contributed by
# Smitha Dinesh Semwal

C#




// C# Program to subtract two Number
// without using arithmetic operator
using System;
 
class GFG {
     
    static int subtract(int x, int y)
    {
         
        // Iterate till there
        // is no carry
        while (y != 0)
        {
             
            // borrow contains common
            // set bits of y and unset
            // bits of x
            int borrow = (~x) & y;
     
            // Subtraction of bits of x
            // and y where at least one
            // of the bits is not set
            x = x ^ y;
     
            // Borrow is shifted by one
            // so that subtracting it from
            // x gives the required sum
            y = borrow << 1;
        }
         
        return x;
    }
     
    // Driver Code
    public static void Main ()
    {
        int x = 29, y = 13;
         
        Console.WriteLine("x - y is " +
                        subtract(x, y));
    }
}
 
// This code is contributed by anuj_67.

PHP




<?php
// PHP Program to subtract two Number
// without using arithmetic operator
 
function subtract($x, $y)
{
     
    // Iterate till there is no carry
    while ($y != 0)
    {
         
        // borrow contains common set
        // bits of y and unset
        // bits of x
        $borrow = (~$x) & $y;
 
        // Subtraction of bits of x
        // and y where at least
        // one of the bits is not set
         
        $x = $x ^ $y;
 
        // Borrow is shifted by one so
        // that subtracting it from
        // x gives the required sum
         
        $y = $borrow << 1;
    }
    return $x;
}
 
        // Driver Code
        $x = 29; $y = 13;
        echo "x - y is ", subtract($x,$y);
 
// This code is contributed by Ajit
?>

Javascript




<script>
 
// JavaScript program to Subtract two numbers
// without using arithmetic operators
 
function subtract(x, y)
{
    // Iterate till there
    // is no carry
    while (y != 0)
    {
        // borrow contains common
        // set bits of y and unset
        // bits of x
        let borrow = (~x) & y;
 
        // Subtraction of bits of x
        // and y where at least one
        // of the bits is not set
        x = x ^ y;
 
        // Borrow is shifted by one
        // so that subtracting it from
        // x gives the required sum
        y = borrow << 1;
    }
    return x;
}
 
// Driver Code
  
let x = 29, y = 13;
document.write("x - y is " + subtract(x, y));
 
 
// This code is contributed by Surbhi Tyagi.
 
</script>

Output : 

x - y is 16

Following is recursive implementation for the same approach. 

C++




#include <iostream>
using namespace std;
 
int subtract(int x, int y)
{
    if (y == 0)
        return x;
    return subtract(x ^ y, (~x & y) << 1);
}
 
// Driver program
int main()
{
    int x = 29, y = 13;
    cout << "x - y is "<< subtract(x, y);
    return 0;
}
 
// this code is contributed by shivanisinghss2110

C




#include<stdio.h>
 
int subtract(int x, int y)
{
    if (y == 0)
        return x;
    return subtract(x ^ y, (~x & y) << 1);
}
 
// Driver program
int main()
{
    int x = 29, y = 13;
    printf("x - y is %d", subtract(x, y));
    return 0;
}

Java




// Java  Program to subtract two Number
// without using arithmetic operator
// Recursive implementation.
class GFG {
 
    static int subtract(int x, int y)
    {
 
        if (y == 0)
            return x;
 
        return subtract(x ^ y, (~x & y) << 1);
    }
 
    // Driver program
    public static void main(String[] args)
    {
        int x = 29, y = 13;
        System.out.printf("x - y is %d",
                            subtract(x, y));
    }
}
 
// This code is contributed by 
// Smitha Dinesh Semwal.

Python3




# Python  Program to
# subtract two Number
# without using arithmetic operator
# Recursive implementation.
 
def subtract(x, y):
 
    if (y == 0):
        return x
    return subtract(x ^ y, (~x & y) << 1)
 
# Driver program
x = 29
y = 13
print("x - y is", subtract(x, y))
 
# This code is contributed by
# Smitha Dinesh Semwal

C#




// C# Program to subtract two Number
// without using arithmetic operator
// Recursive implementation.
using System;
 
class GFG {
 
    static int subtract(int x, int y)
    {
        if (y == 0)
            return x;
 
        return subtract(x ^ y, (~x & y) << 1);
    }
 
    // Driver program
    public static void Main()
    {
        int x = 29, y = 13;
        Console.WriteLine("x - y is "+
                            subtract(x, y));
    }
}
 
// This code is contributed by anuj_67.

PHP




<?php
 
function subtract($x, $y)
{
    if ($y == 0)
        return $x;
    return subtract($x ^ $y,
                   (~$x & $y) << 1);
}
 
// Driver Code
$x = 29; $y = 13;
echo "x - y is ", subtract($x, $y);
 
# This code is contributed by ajit
?>

Javascript




<script>
// javascript  Program to subtract two Number
// without using arithmetic operator
// Recursive implementation.  
function subtract(x , y)
{
 
    if (y == 0)
        return x;
 
    return subtract(x ^ y, (~x & y) << 1);
}
 
// Driver program
var x = 29, y = 13;
document.write("x - y is "+
                    subtract(x, y));
 
// This code is contributed by Princi Singh
</script>

Output : 

x - y is 16

This article is contributed Dheeraj. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :