Subtract two numbers without using arithmetic operators
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 <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
Time Complexity: O(log y)
Auxiliary Space: O(1)
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
Time Complexity: O(log y)
Auxiliary Space: O(log y)
This article is contributed Dheeraj.
Similar Reads
Add two numbers without using arithmetic operators Given two integers a and b, the task is to find the sum of a and b without using + or - operators. Examples: Input: a = 10, b = 30Output: 40Input: a = -1, b = 2Output: 1Approach:The approach is to add two numbers using bitwise operations. Let's first go through some observations: a & b will have
5 min read
Subtract 1 without arithmetic operators Write a program to subtract one from a given number. The use of operators like â+â, â-â, â*â, â/â, â++â, âââ â¦etc are not allowed. Examples: Input: 12Output: 11Input: 6Output: 5Bitwise Subtraction ApproachTo subtract 1 from a number x (say 0011001000), flip all the bits after the rightmost 1 bit (we
5 min read
Javascript program to swap two numbers without using temporary variable To swap two numbers without using a temporary variable, we have multiple approaches. In this article, we are going to learn how to swap two numbers without using a temporary variable. Below are the approaches used to swap two numbers without using a temporary variable: Table of Content Using Arithme
6 min read
Repeated subtraction among two numbers Given a pair of positive numbers x and y. We repeatedly subtract the smaller of the two integers from greater one until one of the integers becomes 0. The task is to count number of steps to before we stop (one of the numbers become 0). Examples : Input : x = 5, y = 13 Output : 6 Explanation : There
6 min read
Implement *, - and / operations using only + arithmetic operator Given two numbers, perform multiplication, subtraction, and division operations on them, using '+' arithmetic operator only. Operations can be performed as follows: Subtraction :- a - b = a + (-1)*b. Multiplication :- a * b = a + a + a ... b times. Division :- a / b = continuously subtract b from a
12 min read