Add two bit strings - GeeksforGeeks

23 Feb, 2022
Given two bit sequences as strings, write a function to return the addition of the two sequences. Bit strings can be of different lengths also. For example, if string 1 is “1100011” and second string 2 is “10”, then the function should return “1100101”.  
Since the sizes of two strings may be different, we first make the size of a smaller string equal to that of the bigger string by adding leading 0s. After making sizes the same, we one by one add bits from rightmost bit to leftmost bit. In every iteration, we need to sum 3 bits: 2 bits of 2 given strings and carry. The sum bit will be 1 if, either all of the 3 bits are set or one of them is set. So we can do XOR of all bits to find the sum bit. How to find carry – carry will be 1 if any of the two bits is set. So we can find carry by taking OR of all pairs. Following is step by step algorithm.1. Make them equal sized by adding 0s at the beginning of smaller string. 2. Perform bit addition .....Boolean expression for adding 3 bits a, b, c .....Sum = a XOR b XOR c .....Carry = (a AND b) OR ( b AND c ) OR ( c AND a )Following is implementation of the above algorithm. 
C++
Java
Python3
C#
#include <iostream>using namespace std; //adds the two-bit strings and return the resultstring addBitStrings( string first, string second ); // Helper method: given two unequal sized bit strings, converts them to// same length by adding leading 0s in the smaller string. Returns the//  new lengthint makeEqualLength(string &str1, string &str2){    int len1 = str1.size();    int len2 = str2.size();    if (len1 < len2)    {        for (int i = 0 ; i < len2 - len1 ; i++)            str1 = '0' + str1;        return len2;    }    else if (len1 > len2)    {        for (int i = 0 ; i < len1 - len2 ; i++)            str2 = '0' + str2;    }    return len1; // If len1 >= len2} // The main function that adds two-bit sequences and returns the additionstring addBitStrings( string first, string second ){    string result;  // To store the sum bits     // make the lengths same before adding    int length = makeEqualLength(first, second);     int carry = 0;  // Initialize carry     // Add all bits one by one    for (int i = length-1 ; i >= 0 ; i--)    {        int firstBit = first.at(i) - '0';        int secondBit = second.at(i) - '0';         // boolean expression for sum of 3 bits        int sum = (firstBit ^ secondBit ^ carry)+'0';         result = (char)sum + result;         // boolean expression for 3-bit addition        carry = (firstBit & secondBit) | (secondBit & carry) | (firstBit & carry);    }     // if overflow, then add a leading 1    if (carry)        result = '1' + result;     return result;} // Driver program to test above functionsint main(){    string str1 = "1100011";    string str2 = "10";     cout << "Sum is " << addBitStrings(str1, str2);    return 0;}
// Java implementation of above algorithmclass GFG{     // Helper method: given two unequal sized bit strings,    // converts them to same length by adding leading 0s    // in the smaller string. Returns the new length    // Using StringBuilder as Java only uses call by value    static int makeEqualLength(StringBuilder str1,                               StringBuilder str2)    {        int len1 = str1.length();        int len2 = str2.length();        if (len1 < len2)        {            for (int i = 0; i < len2 - len1; i++)                str1.insert(0, '0');            return len2;        }        else if (len1 > len2)        {            for (int i = 0; i < len1 - len2; i++)                str2.insert(0, '0');        }         return len1; // If len1 >= len2    }     // The main function that adds two-bit sequences    // and returns the addition    static String addBitStrings(StringBuilder str1,                                StringBuilder str2)    {        String result = ""; // To store the sum bits         // make the lengths same before adding        int length = makeEqualLength(str1, str2);         // Convert StringBuilder to Strings        String first = str1.toString();        String second = str2.toString();         int carry = 0; // Initialize carry         // Add all bits one by one        for (int i = length - 1; i >= 0; i--)        {            int firstBit = first.charAt(i) - '0';            int secondBit = second.charAt(i) - '0';             // boolean expression for sum of 3 bits            int sum = (firstBit ^ secondBit ^ carry) + '0';             result = String.valueOf((char) sum) + result;             // boolean expression for 3-bit addition            carry = (firstBit & secondBit) |                    (secondBit & carry) |                    (firstBit & carry);        }                 // if overflow, then add a leading 1        if (carry == 1)            result = "1" + result;        return result;    }     // Driver Code    public static void main(String[] args)    {        String str1 = "1100011";        String str2 = "10";        System.out.println("Sum is " +        addBitStrings(new StringBuilder(str1),                      new StringBuilder(str2)));    }} // This code is contributed by Vivek Kumar Singh
# Python3 program for above approach # adds the two-bit strings and return the result # Helper method: given two unequal sized bit strings,# converts them to same length by adding leading 0s# in the smaller string. Returns the new lengthdef makeEqualLength(str1, str2):     len1 = len(str1)     # Length of string 1    len2 = len(str2)     # length of string 2    if len1 < len2:        str1 = (len2 - len1) * '0' + str1        len1 = len2    elif len2 < len1:        str2 = (len1 - len2) * '0' + str2        len2 = len1    return len1, str1, str2 def addBitStrings( first, second ):    result = '' # To store the sum bits     # make the lengths same before adding    length, first, second = makeEqualLength(first, second)     carry = 0 # initialize carry as 0     # Add all bits one by one    for i in range(length - 1, -1, -1):        firstBit = int(first[i])        secondBit = int(second[i])         # boolean expression for sum of 3 bits        sum = (firstBit ^ secondBit ^ carry) + 48        result = chr(sum) + result         # boolean expression for 3 bits addition        carry = (firstBit & secondBit) | \                (secondBit & carry) | \                (firstBit & carry)         # if overflow, then add a leading 1    if carry == 1:        result = '1' + result    return result # Driver Codeif __name__ == '__main__':    str1 = '1100011'    str2 = '10'    print('Sum is', addBitStrings(str1, str2))     # This code is contributed by# chaudhary_19 (Mayank Chaudhary)
// C# implementation of above algorithmusing System;using System.Text; class GFG{     // Helper method: given two unequal sized    // bit strings, converts them to same length    // by adding leading 0s in the smaller string.    // Returns the new length Using StringBuilder    // as Java only uses call by value    static int makeEqualLength(StringBuilder str1,                               StringBuilder str2)    {        int len1 = str1.Length;        int len2 = str2.Length;        if (len1 < len2)        {            for (int i = 0; i < len2 - len1; i++)            {                str1.Insert(0, '0');            }            return len2;        }        else if (len1 > len2)        {            for (int i = 0; i < len1 - len2; i++)            {                str2.Insert(0, '0');            }        }         return len1; // If len1 >= len2    }     // The main function that adds two-bit sequences    // and returns the addition    static string addBitStrings(StringBuilder str1,                                StringBuilder str2)    {        string result = ""; // To store the sum bits         // make the lengths same before adding        int length = makeEqualLength(str1, str2);         // Convert StringBuilder to Strings        string first = str1.ToString();        string second = str2.ToString();         int carry = 0; // Initialize carry         // Add all bits one by one        for (int i = length - 1; i >= 0; i--)        {            int firstBit = first[i] - '0';            int secondBit = second[i] - '0';             // boolean expression for sum of 3 bits            int sum = (firstBit ^ secondBit ^ carry) + '0';             result = ((char) sum).ToString() + result;             // boolean expression for 3-bit addition            carry = (firstBit & secondBit) |                       (secondBit & carry) |                        (firstBit & carry);        }         // if overflow, then add a leading 1        if (carry == 1)        {            result = "1" + result;        }        return result;    }     // Driver Code    public static void Main(string[] args)    {        string str1 = "1100011";        string str2 = "10";        Console.WriteLine("Sum is " +                addBitStrings(new StringBuilder(str1),                              new StringBuilder(str2)));    }} // This code is contributed by kumar65
Output:
 Sum is 1100101
Time Complexity: O(|str1|)
Auxiliary Space: O(1)This article is compiled by Ravi Chandra Enaganti. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
Akanksha_Rai
Vivekkumar Singh
chaudhary_19
kumar65
subham348
surinderdawra388
binary-representation
binary-string
Bitwise-XOR
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Set, Clear and Toggle a given bit of a number in C
Program to find parity
Bit Tricks for Competitive Programming
Write an Efficient Method to Check if a Number is Multiple of 3
Check for Integer Overflow
Convert decimal fraction to binary number
Reverse actual bits of the given number
Builtin functions of GCC compiler
Hamming code Implementation in C/C++
Check if a Number is Odd or Even using Bitwise Operators