Subtract two numbers without using arithmetic operators

Subtract two numbers without using arithmetic operators

Problem Statement:

Subtract two numbers without using arithmetic operators

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

We suggest you think about a solution before reading further…

Solution:

Find borrow by doing AND (&) of complement of x and y. Now borrow contains common set bits of y and unset bits of x. Subtraction can be obtained from taking an AND of x and y after getting the borrow. Left shift borrow by 1, so subtracting it from x gives required sum. The same logic can be implemented iteratively as well as recursively as shown below.

//Subtract two numbers without using arithmetic operators
public class SubtractTwoNumbers {

	public static void main(String[] args) {
		int a = 30;
		int b = 10;
		
		int ans1 = subIterative(a, b);
		System.out.println("By Iterative method : "+ ans1);
		
		int ans2 = subRecursion(a,b);
		System.out.println("By Recursive method : "+ ans2);
	}

	private static int subIterative(int a, int b) {		
		//iterate till second no becomes 0
		while(b != 0){

                        // borrow contains common set bits of b and unset bits of a
			int borrow = (~a) & b;
			
			// Subtraction of bits of 'a' and 'b' where at least one of the bits is not set
			a = a ^ b;
			
			// Borrow is shifted by one so that subtracting it from 'a' gives the required sum
			b = borrow << 1;
		}
		return a;		 
	}

	private static int subRecursion(int a, int b) {
		if(b == 0){
			return a;
		}else{
			//Pass Sum, Carry shifted by 1 recursively
			return subRecursion(a ^ b, (~a & b) << 1);
		}		
	}
}

Output:

By Iterative method : 20
By Recursive method : 20

 

Leave a Reply

Your email address will not be published. Required fields are marked *