# Add two numbers without using arithmetic operators

• Difficulty Level : Hard
• Last Updated : 27 Apr, 2022

## C++

 `#include ``using` `namespace` `std;` `int` `add(``int` `a, ``int` `b)``{``    ``// for loop will start from 1 and move till the value of``    ``// second number , first number(a) is incremented in for``    ``// loop``    ``for` `(``int` `i = 1; i <= b; i++)``        ``a++;``    ``return` `a;``}` `int` `main()``{``    ``// first number is 10 and second number is 32 , for loop``    ``// will start from 1 and move till 32 and the value of a``    ``// is incremented 32 times which will give us the total``    ``// sum of two numbers` `    ``int` `a = add(10, 32);``    ``cout << a;``    ``return` `0;``}` `// This code is contributed by Aditya Kumar (adityakumar129)`

## C

 `#include ` `int` `add(``int` `a, ``int` `b)``{``    ``// for loop will start from 1 and move till the value of``    ``// second number , first number(a) is incremented in for``    ``// loop``    ``for` `(``int` `i = 1; i <= b; i++)``        ``a++;``    ``return` `a;``}` `int` `main()``{``    ``// first number is 10 and second number is 32 , for loop``    ``// will start from 1 and move till 32 and the value of a``    ``// is incremented 32 times which will give us the total``    ``// sum of two numbers` `    ``int` `a = add(10, 32);``    ``printf``(``"%d"``, a);``    ``return` `0;``}` `// This code is contributed by Aditya Kumar (adityakumar129)`

## Java

 `import` `java.util.*;` `class` `GFG {` `    ``static` `int` `add(``int` `a, ``int` `b)``    ``{``        ``// for loop will start from 1 and move till the``        ``// value of second number , first number(a) is``        ``// incremented in for loop``        ``for` `(``int` `i = ``1``; i <= b; i++)``            ``a++;``        ``return` `a;``    ``}` `    ``public` `static` `void` `main(String[] args)``    ``{``        ``// first number is 10 and second number is 32 , for``        ``// loop will start from 1 and move till 32 and the``        ``// value of a is incremented 32 times which will``        ``// give us the total sum of two numbers``        ``int` `a = add(``10``, ``32``);``        ``System.out.print(a);``    ``}``}` `// This code is contributed by Aditya Kumar (adityakumar129)`

## Python3

 `# Python implementation``def` `add(a, b):``    ``# for loop will start from 1 and move till the value of second number ,``    ``# first number(a) is incremented in for loop``    ``for` `i ``in` `range``(``1``, b ``+` `1``):``        ``a ``=` `a ``+` `1``    ``return` `a`  `# driver code``# first number is 10 and second number is 32 , for loop``# will start from 1 and move till 32 and the value of a``# is incremented 32 times which will give us the total``# sum of two numbers``a ``=` `add(``10``, ``32``)``print``(a)` `# This code is contributed by Aditya Kumar (adityakumar129)`

## C#

 `using` `System;``public` `class` `GFG {` `  ``static` `int` `add(``int` `a, ``int` `b) {``    ``for` `(``int` `i = 1; i <= b; i++) ``// for loop will start from 1 and move till the value of second``      ``// number , first number(a) is incremented in for loop``    ``{``      ``a++;``    ``}``    ``return` `a;``  ``}` `  ``public` `static` `void` `Main(String[] args)``  ``{` `    ``int` `a = add(10, 32); ``// first number is 10 and second number is 32 , for loop will start``    ``Console.Write(a); ``// from 1 and move till 32 and the value of a is incremented 32 times``    ``// which will give us the total sum of two numbers``  ``}``}` `// This code is contributed by Rajput-Ji`

## Javascript

 ``

Write a function Add() that returns sum of two integers. The function should not use any of the arithmetic operators (+, ++, –, -, .. etc).
Sum of two bits can be obtained by performing XOR (^) of the two bits. Carry bit can be obtained by performing AND (&) of two bits.

Above is simple Half Adder logic that can be used to add 2 single bits. We can extend this logic for integers. If x and y don’t have set bits at same position(s), then bitwise XOR (^) of x and y gives the sum of x and y. To incorporate common set bits also, bitwise AND (&) is used. Bitwise AND of x and y gives all carry bits. We calculate (x & y) << 1 and add it to x ^ y to get the required result.

## C++

 `// C++ Program to add two numbers``// without using arithmetic operator``#include ``using` `namespace` `std;` `int` `Add(``int` `x, ``int` `y)``{``    ``// Iterate till there is no carry``    ``while` `(y != 0)``    ``{``        ``// carry should be unsigned to``        ``// deal with -ve numbers``        ``// carry now contains common``        ``//set bits of x and y``        ``unsigned carry = x & y;` `        ``// Sum of bits of x and y where at``        ``//least one of the bits is not set``        ``x = x ^ y;` `        ``// Carry is shifted by one so that adding``        ``// it to x gives the required sum``        ``y = carry << 1;``    ``}``    ``return` `x;``}` `// Driver code``int` `main()``{``    ``cout << Add(15, 32);``    ``return` `0;``}` `// This code is contributed by rathbhupendra`

## C

 `// C Program to add two numbers``// without using arithmetic operator``#include` `int` `Add(``int` `x, ``int` `y)``{``    ``// Iterate till there is no carry ``    ``while` `(y != 0)``    ``{``        ``// carry now contains common``        ``//set bits of x and y``        ``unsigned carry = x & y; ` `        ``// Sum of bits of x and y where at``        ``//least one of the bits is not set``        ``x = x ^ y;` `        ``// Carry is shifted by one so that adding``        ``// it to x gives the required sum``        ``y = carry << 1;``    ``}``    ``return` `x;``}` `int` `main()``{``    ``printf``(``"%d"``, Add(15, 32));``    ``return` `0;``}`

## Java

 `// Java Program to add two numbers``// without using arithmetic operator``import` `java.io.*;` `class` `GFG``{``    ``static` `int` `Add(``int` `x, ``int` `y)``    ``{``        ``// Iterate till there is no carry``        ``while` `(y != ``0``)``        ``{``            ``// carry now contains common``            ``// set bits of x and y``            ``int` `carry = x & y;` `            ``// Sum of bits of x and``            ``// y where at least one``            ``// of the bits is not set``            ``x = x ^ y;` `            ``// Carry is shifted by``            ``// one so that adding it``            ``// to x gives the required sum``            ``y = carry << ``1``;``        ``}``        ``return` `x;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main(String arg[])``    ``{``        ``System.out.println(Add(``15``, ``32``));``    ``}``}` `// This code is contributed by Anant Agarwal.`

## Python3

 `# Python3 Program to add two numbers``# without using arithmetic operator``def` `Add(x, y):` `    ``# Iterate till there is no carry``    ``while` `(y !``=` `0``):``    ` `        ``# carry now contains common``        ``# set bits of x and y``        ``carry ``=` `x & y` `        ``# Sum of bits of x and y where at``        ``# least one of the bits is not set``        ``x ``=` `x ^ y` `        ``# Carry is shifted by one so that  ``        ``# adding it to x gives the required sum``        ``y ``=` `carry << ``1``    ` `    ``return` `x` `print``(Add(``15``, ``32``))` `# This code is contributed by``# Smitha Dinesh Semwal`

## C#

 `// C# Program to add two numbers``// without using arithmetic operator``using` `System;` `class` `GFG``{``    ``static` `int` `Add(``int` `x, ``int` `y)``    ``{``        ``// Iterate till there is no carry``        ``while` `(y != 0)``        ``{``            ``// carry now contains common``            ``// set bits of x and y``            ``int` `carry = x & y;` `            ``// Sum of bits of x and``            ``// y where at least one``            ``// of the bits is not set``            ``x = x ^ y;` `            ``// Carry is shifted by``            ``// one so that adding it``            ``// to x gives the required sum``            ``y = carry << 1;``        ``}``        ``return` `x;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``Console.WriteLine(Add(15, 32));``    ``}``}` `// This code is contributed by vt_m.`

## PHP

 ``

## Javascript

 ``

Output :

`47`

Time Complexity: O(log y)

Auxiliary Space: O(1)

Following is the recursive implementation for the same approach.

## C++

 `int` `Add(``int` `x, ``int` `y)``{``    ``if` `(y == 0)``        ``return` `x;``    ``else``        ``return` `Add( x ^ y,(unsigned) (x & y) << 1);``}` `// This code is contributed by shubhamsingh10`

## C

 `int` `Add(``int` `x, ``int` `y)``{``    ``if` `(y == 0)``        ``return` `x;``    ``else``        ``return` `Add( x ^ y, (unsigned)(x & y) << 1);``}`

## Java

 `static` `int` `Add(``int` `x, ``int` `y)``{``  ``if` `(y == ``0``)``    ``return` `x;``  ``else``    ``return` `Add(x ^ y, (x & y) << ``1``);``}` `// This code is contributed by subham348`

## Python3

 `def` `Add(x, y):``  ` `    ``if` `(y ``=``=` `0``):``        ``return` `x``    ``else``        ``return` `Add( x ^ y, (x & y) << ``1``)``    ` `# This code is contributed by subhammahato348`

## C#

 `static` `int` `Add(``int` `x, ``int` `y)``{``  ``if` `(y == 0)``    ``return` `x;``  ``else``    ``return` `Add(x ^ y, (x & y) << 1);``}` `// This code is contributed by subhammahato348`

## Javascript

 `function` `Add(x, y)``{``    ``if` `(y == 0)``        ``return` `x;``    ``else``        ``return` `Add(x ^ y, (x & y) << 1);``}` `// This code is contributed by Ankita saini`