Subtract two numbers without using arithmetic operators (original) (raw)

Last Updated : 01 Nov, 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.

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

borrow=( borrow = (~borrow=( x) & $y; // Subtraction of bits of x // and y where at least // one of the bits is not set x=x = x=x ^ $y; // Borrow is shifted by one so // that subtracting it from // x gives the required sum y=y = y=borrow << 1; } return $x; } // Driver Code x=29;x = 29; x=29;y = 13; echo "x - y is ", subtract($x,$y); // This code is contributed by Ajit ?>

JavaScript

`

Output :

x - y is 16

Time Complexity: O(log y)

Auxiliary Space: O(1)

Following is recursive implementation for the same approach.

C++ `

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

x=29;x = 29; x=29;y = 13; echo "x - y is ", subtract($x, $y); # This code is contributed by ajit ?>

JavaScript

`

Output :

x - y is 16

Time Complexity: O(log y)

Auxiliary Space: O(log y)

This article is contributed Dheeraj.