# Add two unsigned numbers using bits

Given two unsigned integers (maximum possible input can be of 32 bits). The task is to add two numbers using bit operations.

Examples:

```Input: n1 = 12, n2 = 34
Output: 46

Input: n1 = 12564 n2 = -1
Output: 12563
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Since we know that in bit addition

• 1+0=1
• 0+1=1
• 0+0=0
• 1+1=0 carry 1
• if(carry==1) 1+1=1 carry 1

Represent integer using bitset function in C++ . It behaves like an array which stores the LSB (Least Significant Bit) at 0th index and when we print such an array it prints the binary representation in reverse format. Add every bit from right according to the bits addition property and store in the third bitset. Function to_ulong() is used to convert a bitset form into its decimal form.

Below is the implementation of the above approach.

## C++

 `#include ` `#define M 32 ` `using` `namespace` `std; ` ` `  `// Function to add two bitset ` `int` `binAdd(bitset atemp, bitset btemp) ` `{ ` `    ``// To store the bits of answer ` `    ``bitset ctemp; ` `    ``for` `(``int` `i = 0; i < M; i++) ` `        ``ctemp[i] = 0; ` ` `  `    ``// Initialize carry to 0 ` `    ``int` `carry = 0; ` ` `  `    ``for` `(``int` `i = 0; i < M; i++) { ` ` `  `        ``// Both bits are zero ` `        ``if` `(atemp[i] + btemp[i] == 0) { ` ` `  `            ``if` `(carry == 0) ` `                ``ctemp[i] = 0; ` ` `  `            ``else` `{ ` `                ``ctemp[i] = 1; ` `                ``carry = 0; ` `            ``} ` `        ``} ` ` `  `        ``// Any of the one bit is 1 ` `        ``else` `if` `(atemp[i] + btemp[i] == 1) { ` ` `  `            ``if` `(carry == 0) ` `                ``ctemp[i] = 1; ` `            ``else` `{ ` `                ``ctemp[i] = 0; ` `            ``} ` `        ``} ` ` `  `        ``// Both bits are 1 ` `        ``else` `{ ` `            ``if` `(carry == 0) { ` `                ``ctemp[i] = 0; ` `                ``carry = 1; ` `            ``} ` `            ``else` `{ ` `                ``ctemp[i] = 1; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// To convert bitset into ` `    ``// decimal equivalent ` `    ``return` `ctemp.to_ulong(); ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `number1, number2; ` `    ``number1 = 12; ` `    ``number2 = 34; ` ` `  `    ``// Converting number 1 to bitset form ` `    ``bitset num1(number1); ` ` `  `    ``// Converting number 2 to bitset form ` `    ``bitset num2(number2); ` ` `  `    ``cout << binAdd(num1, num2) << endl; ` `} `

## Java

 `// Java program to add two ` `// unsigned numbers using bits ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `static` `final` `int` `M = ``32``; ` ` `  `// Function to add two BitSet ` `static` `long` `binAdd(BitSet atemp, ` `                   ``BitSet btemp) ` `{ ` `    ``// To store the bits of answer ` `    ``BitSet ctemp = ``new` `BitSet(M); ` `    ``for` `(``int` `i = ``0``; i < M; i++) ` `        ``ctemp.set(i, ``false``); ` ` `  `    ``// Initialize carry to 0 ` `    ``int` `carry = ``0``; ` ` `  `    ``for` `(``int` `i = ``0``; i < M; i++) ` `    ``{ ` ` `  `        ``// Both bits are zero ` `        ``if` `(atemp.get(i) ==``false` `&& ` `            ``btemp.get(i) == ``false``)  ` `        ``{ ` ` `  `            ``if` `(carry == ``0``) ` `                ``ctemp.set(i, ``false``); ` ` `  `            ``else`  `            ``{ ` `                ``ctemp.set(i, ``true``); ` `                ``carry = ``0``; ` `            ``} ` `        ``} ` ` `  `        ``// Any of the one bit is 1 ` `        ``else` `if` `(atemp.get(i) == ``true``||  ` `                 ``btemp.get(i) == ``true``)  ` `        ``{ ` ` `  `            ``if` `(carry == ``0``) ` `                ``ctemp.set(i, ``true``); ` `            ``else`  `            ``{ ` `                ``ctemp.set(i, ``false``); ` `            ``} ` `        ``} ` ` `  `        ``// Both bits are 1 ` `        ``else`  `        ``{ ` `            ``if` `(carry == ``0``) ` `            ``{ ` `                ``ctemp.set(i, ``false``); ` `                ``carry = ``1``; ` `            ``} ` `            ``else`  `            ``{ ` `                ``ctemp.set(i, ``true``); ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// To convert BitSet into ` `    ``// decimal equivalent ` `    ``return` `ctemp.toLongArray()[``0``]; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `number1, number2; ` `    ``number1 = ``12``; ` `    ``number2 = ``34``; ` ` `  `    ``// Converting number 1 to BitSet form ` `    ``BitSet num1 = BitSet.valueOf(``new` `long``[]{number1}); ` `     `  `    ``// Converting number 2 to BitSet form ` `    ``BitSet num2 = BitSet.valueOf(``new` `long``[]{number2}); ` ` `  `    ``System.out.println(binAdd(num1, num2) ); ` `} ` `} ` ` `  `// This code is contributed ` `// by Arnab Kundu `

## Python3

 `# Python3 implementation of the approach ` ` `  `# Function to convert given Integer ` `# to list of bits of length M ` `def` `bitset(num): ` `     `  `    ``return` `[``int``(x) ``for` `x ``in` `format``(num, ``'032b'``)] ` `     `  `# Function to add two bitset  ` `def` `binAdd(atemp, btemp):  ` ` `  `    ``# To store the bits of answer  ` `    ``ctemp ``=` `[``0``] ``*` `M  ` `     `  `    ``# Initialize carry to 0  ` `    ``carry ``=` `0` `    ``for` `i ``in` `range``(``0``, M):  ` ` `  `        ``# Both bits are zero  ` `        ``if` `atemp[i] ``+` `btemp[i] ``=``=` `0``:  ` ` `  `            ``if` `carry ``=``=` `0``: ` `                ``ctemp[i] ``=` `0` ` `  `            ``else``:  ` `                ``ctemp[i] ``=` `1` `                ``carry ``=` `0` `             `  `        ``# Any of the one bit is 1  ` `        ``elif` `atemp[i] ``+` `btemp[i] ``=``=` `1``:  ` ` `  `            ``if` `carry ``=``=` `0``: ` `                ``ctemp[i] ``=` `1` `            ``else``:  ` `                ``ctemp[i] ``=` `0` ` `  `        ``# Both bits are 1  ` `        ``else``: ` `            ``if` `carry ``=``=` `0``:  ` `                ``ctemp[i] ``=` `0` `                ``carry ``=` `1` `             `  `            ``else``: ` `                ``ctemp[i] ``=` `1` `             `  `    ``# To convert bitset into string and then  ` `    ``# convert string to its decimal equivalent  ` `    ``temp ``=` `''.join([``str``(x) ``for` `x ``in` `ctemp]) ` `    ``return` `int``(temp, ``2``) ` `     `  `# Driver Code  ` `if` `__name__ ``=``=` `"__main__"``:  ` ` `  `    ``number1, number2 ``=` `12``, ``34` `    ``M ``=` `32` `     `  `    ``# Converting number 1 to bitset form  ` `    ``num1 ``=` `bitset(number1)  ` ` `  `    ``# Converting number 2 to bitset form  ` `    ``num2 ``=` `bitset(number2)  ` ` `  `    ``print``(binAdd(num1, num2)) ` `     `  `# This code is contributed by Rituraj Jain `

Output:

```46
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : andrew1234, rituraj_jain

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.