Related Articles

# Add two unsigned numbers using bits

• Last Updated : 25 May, 2021

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

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.*; ``// Needed for BitSet class.` `class` `GFG {``    ``static` `final` `int` `M = ``32``;` `    ``// Function to add two BitSets. Returns long number.``    ``static` `long` `binAdd(BitSet atemp, BitSet btemp)``    ``{``        ``// Initialize a 3rd BitSet to store the answer.``        ``BitSet ctemp = ``new` `BitSet(M);``        ``for` `(``int` `i = ``0``; i < M; i++) {``            ``ctemp.set(i, ``false``);``        ``}` `        ``// Initialize carry to ZERO.``        ``int` `carry = ``0``;` `        ``for` `(``int` `i = ``0``; i < M; i++) {` `            ``// Both of the bits are ZERO.``            ``if` `(atemp.get(i) == ``false``                ``&& ``// Uses the "conditional-AND" operator``                   ``// (also known as "short-circuit AND")``                   ``// which is more efficient than the``                   ``// ordinary & bitwise operator.``                ``btemp.get(i) == ``false``) {` `                ``if` `(carry == ``0``) {``                    ``ctemp.set(i, ``false``);``                ``}``                ``else` `{``                    ``ctemp.set(i, ``true``);``                    ``carry = ``0``;``                ``}``            ``}` `            ``// Either of the bits is a ONE but not both.``            ``else` `if` `(atemp.get(i) == ``true``                     ``^ ``// Uses the "XOR" (exclusive-OR)``                       ``// operator to ensure that ONLY``                       ``// one of the two bits is a ONE.``                     ``btemp.get(i) == ``true``) {` `                ``if` `(carry == ``0``) {``                    ``ctemp.set(i, ``true``);``                ``}``                ``else` `{``                    ``ctemp.set(i, ``false``);``                ``}``            ``}` `            ``// Both of the bits are ONE.``            ``else` `// By process of elimination we do not need``                 ``// to code for the (TRUE & TRUE) condition.``            ``{``                ``if` `(carry == ``0``) {``                    ``ctemp.set(i, ``false``);``                    ``carry = ``1``;``                ``}``                ``else` `{``                    ``ctemp.set(i, ``true``);``                ``}``            ``}``        ``}` `        ``// Returns the 3rd BitSet as its decimal equivalent``        ``// number in long format.``        ``return` `ctemp.toLongArray()[``0``];``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `number1, number2;` `        ``// binary literal for decimal 15.``        ``number1 = ``15``;``        ``// binary literal for decimal 85.``        ``number2 = ``1``;``        ``// result should be decimal 100.` `        ``// Converting number1 to BitSet form.``        ``BitSet num1``            ``= BitSet.valueOf(``new` `long``[] { number1 });` `        ``// Converting number2 to BitSet form.``        ``BitSet num2``            ``= BitSet.valueOf(``new` `long``[] { number2 });` `        ``System.out.printf(``"%d plus %d equals %d"``, number1,``                          ``number2, binAdd(num1, num2));``        ``System.out.println();``    ``}``}` `// This code is contributed by Arnab Kundu.``// Modified by Matt Ambrose.`

## 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
```
Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up