Skip to content
Related Articles

Related Articles

Add two unsigned numbers using bits
  • Last Updated : 12 Feb, 2019

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 <bits/stdc++.h>
#define M 32
using namespace std;
  
// Function to add two bitset
int binAdd(bitset<M> atemp, bitset<M> btemp)
{
    // To store the bits of answer
    bitset<M> 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<M> num1(number1);
  
    // Converting number 2 to bitset form
    bitset<M> 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] *
      
    # 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

Attention reader! Don’t stop learning now. Get hold of all the important C++ Foundation and STL concepts with the C++ Foundation and STL courses at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :