How to add Two Binary Strings in Golang?

This tutorial will show how we can add two binary strings in Golang. Also, we will cover and understand all the cases while adding two strings using examples.

Example

  • Suppose we want to add these two binary strings "111" and "1011" whose numeric values are 7 and 11 whose addition is 18 with binary representation "10010". Now we will do the addition of these strings step by step below.variables with the respective values you want to multiply.

  • As you can see the length of string "111" is less than "1011" so we have to make them equal for which we can add "0" in a string that is shorter in length due to which the value will also remain the same. The length of "111" is shorter than "1011" so we will add one zero.

  • Now strings look like this,

"0111" and "1011"

Algorithm

  • STEP 1 ? Declaring the strings which are going to add.

  • STEP 2 ? Initializing the strings with the binary strings.

  • STEP 3 ? Adding ?0? in starting to the smaller string.

  • STEP 4 ? Adding both the strings and storing them in the third string.

Example

<div class="execute"></div><div class="code-mirror  language-java" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">package</span> <span class="token namespace">main</span>

<span class="token comment">// fmt package provides the function to print anything</span>
<span class="token keyword">import</span> <span class="token string">"fmt"</span>

<span class="token comment">// function which will add the binary strings</span>
func <span class="token function">binaryAdditionOfStrings</span><span class="token punctuation">(</span>string1<span class="token punctuation">,</span> string2 string<span class="token punctuation">)</span> string <span class="token punctuation">{</span>
   <span class="token comment">// checking if the length of the first string is greater then</span>
   <span class="token comment">// second then calling the function by swapping the parameters</span>
<span class="token keyword">   if</span> <span class="token function">len</span><span class="token punctuation">(</span>string1<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token function">len</span><span class="token punctuation">(</span>string2<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token function">binaryAdditionOfStrings</span><span class="token punctuation">(</span>string2<span class="token punctuation">,</span> string1<span class="token punctuation">)</span>
<span class="token punctuation">   }</span>
<span class="token comment">   // finding the difference between the length of the strings</span>
   difference <span class="token operator">:</span><span class="token operator">=</span> <span class="token function">len</span><span class="token punctuation">(</span>string2<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token function">len</span><span class="token punctuation">(</span>string1<span class="token punctuation">)</span>

<span class="token comment">   // making both strings equal by adding 0 in front of a smaller string</span>
   <span class="token keyword">for</span> i <span class="token operator">:</span><span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> difference<span class="token punctuation">;</span> i<span class="token operator">++</span> <span class="token punctuation">{</span>
      string1 <span class="token operator">=</span> <span class="token string">"0"</span> <span class="token operator">+</span> string1
   <span class="token punctuation">}</span>
<span class="token comment">   // initializing a variable carry to keep the track of carry after</span>

<span class="token comment">   // each addition</span>
   carry <span class="token operator">:</span><span class="token operator">=</span> <span class="token string">"0"</span>

<span class="token comment">   // In this variable we will store our final string</span>
   answer <span class="token operator">:</span><span class="token operator">=</span> <span class="token string">""</span>
 
<span class="token comment">   // traversing the strings and adding them by picking the index from the end /*</span>
   /* <span class="token class-name">For</span> example<span class="token punctuation">,</span> we are adding "<span class="token number">100</span>" and "<span class="token number">110</span>"<span class="token punctuation">.</span>
   <span class="token class-name">So</span><span class="token punctuation">,</span> <span class="token keyword">for</span> the last characters in the string i<span class="token punctuation">.</span>e "<span class="token number">0</span>" and "<span class="token number">0</span>" the first <span class="token keyword">else</span>
<span class="token keyword">   if</span> condition will <span class="token class-name"><span class="token namespace">run<span class="token punctuation">.</span></span>
      Then</span> <span class="token keyword">for</span> the middle characters i<span class="token punctuation">.</span>e "<span class="token number">0</span>" and "<span class="token number">1</span>" the last <span class="token keyword">else</span> <span class="token keyword">if</span>
   condition will run and
      <span class="token keyword">for</span> the first characters i<span class="token punctuation">.</span>e "<span class="token number">1</span>" and "<span class="token number">1</span>" the first <span class="token keyword">if</span> condition will run<span class="token punctuation">.</span>
    <span class="token operator">*</span><span class="token operator">/</span>
<span class="token keyword">   for</span> i <span class="token operator">:</span><span class="token operator">=</span> <span class="token function">len</span><span class="token punctuation">(</span>string1<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">>=</span> <span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> string1<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">'1'</span> <span class="token operator">&&</span> string2<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">'1'</span> <span class="token punctuation">{</span>
         <span class="token keyword">if</span> carry <span class="token operator">==</span> <span class="token string">"1"</span> <span class="token punctuation">{</span>
            answer <span class="token operator">=</span> <span class="token string">"1"</span> <span class="token operator">+</span> answer
         <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
            answer <span class="token operator">=</span> <span class="token string">"0"</span> <span class="token operator">+</span> answer
            carry <span class="token operator">=</span> <span class="token string">"1"</span>
         <span class="token punctuation">}</span>
      <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> string1<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">'0'</span> <span class="token operator">&&</span> string2<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">'0'</span> <span class="token punctuation">{</span>
         <span class="token keyword">if</span> carry <span class="token operator">==</span> <span class="token string">"1"</span> <span class="token punctuation">{</span>
            answer <span class="token operator">=</span> <span class="token string">"1"</span> <span class="token operator">+</span> answer
            carry <span class="token operator">=</span> <span class="token string">"0"</span>
         <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
            answer <span class="token operator">=</span> <span class="token string">"0"</span> <span class="token operator">+</span> answer
         <span class="token punctuation">}</span>
      <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> string1<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">!=</span> string2<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token punctuation">{</span>
         <span class="token keyword">if</span> carry <span class="token operator">==</span> <span class="token string">"1"</span> <span class="token punctuation">{</span>
            answer <span class="token operator">=</span> <span class="token string">"0"</span> <span class="token operator">+</span> answer
         <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
            answer <span class="token operator">=</span> <span class="token string">"1"</span> <span class="token operator">+</span> answer
         <span class="token punctuation">}</span>
      <span class="token punctuation">}</span>
   <span class="token punctuation">}</span>
   <span class="token keyword">if</span> carry <span class="token operator">==</span> <span class="token string">"1"</span> <span class="token punctuation">{</span>
      answer <span class="token operator">=</span> <span class="token string">"1"</span> <span class="token operator">+</span> answer
   <span class="token punctuation">}</span>
   <span class="token keyword">return</span> answer
<span class="token punctuation">}</span>
func <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>

   <span class="token comment">// declaring the strings</span>
   <span class="token keyword">var</span> string1<span class="token punctuation">,</span> string2 string
   
   <span class="token comment">// initializing the strings</span>
   string1 <span class="token operator">=</span> <span class="token string">"10101"</span>
   string2 <span class="token operator">=</span> <span class="token string">"100111"</span>
   
   result <span class="token operator">:</span><span class="token operator">=</span> <span class="token function">binaryAdditionOfStrings</span><span class="token punctuation">(</span>string1<span class="token punctuation">,</span> string2<span class="token punctuation">)</span>
   <span class="token comment">// Printing the result of the addition of both the binary strings</span>
   <span class="token class-name"><span class="token namespace">fmt<span class="token punctuation">.</span></span>Println</span><span class="token punctuation">(</span><span class="token string">"The Numeric representation of"</span><span class="token punctuation">,</span> string1<span class="token punctuation">,</span> <span class="token string">"is"</span><span class="token punctuation">,</span> <span class="token string">"21."</span><span class="token punctuation">)</span>
   <span class="token class-name"><span class="token namespace">fmt<span class="token punctuation">.</span></span>Println</span><span class="token punctuation">(</span><span class="token string">"The Numeric representation of"</span><span class="token punctuation">,</span> string2<span class="token punctuation">,</span> <span class="token string">"is"</span><span class="token punctuation">,</span> <span class="token string">"39."</span><span class="token punctuation">)</span>
   
   <span class="token class-name"><span class="token namespace">fmt<span class="token punctuation">.</span></span>Println</span><span class="token punctuation">(</span><span class="token string">"The Binary addition of"</span><span class="token punctuation">,</span> string1<span class="token punctuation">,</span> <span class="token string">"and"</span><span class="token punctuation">,</span> string2<span class="token punctuation">,</span> <span class="token string">"is"</span><span class="token punctuation">,</span> result<span class="token punctuation">,</span> <span class="token string">"whose value in numeric is 60.")</span></div><div class="code-mirror  language-java" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token string">}</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

In the above code, the main logic resides in binaryAdditionOfStrings() function so we will discuss it line by line.

  • if len(string1) > len(string2) {} - First, check if the length of the first string is greater than the second then call the function again by swapping the parameters.

  • difference:= len(string2) - len(string1) - Next, we are finding the difference between the length of the strings and adding that number of zeros in the smaller one to make both strings equal in size.

  • carry:= "0" - Now we are declaring the carry and answer variable and will update it while traversing the strings.

  • This is the step that includes the core logic where we are running a for loop over the strings and traversing from the last.

    • if string1[i] == '1' && string2[i] == '1' {} - The first if the condition is checking the current index value in both the strings is "1" if yes then we are checking the value of carrying

      • If carry is "1" then we have to add three "1" which is equal to "11" in binary(3 in numeric) so then we will add "1" in front of the answer string and carry will remain "1"

      • Else we have to just add two "1" which is equal to "10" in binary(2 in numeric) so then we will add "0" in the front of the answer string and set carry "1".

    • else if string1[i] == '0' && string2[i] == '0' {} - Now the else if the condition is checking that the value at the current index in both arrays is zero then we are checking the carry.

      • If the carry is "1" then we have to add one "1" and two "0" which is equal to "1" in binary(1 in numeric) so then we will add "1" in front of the answer string and carry will become "0"

      • Else we have to just add three "0" which is equal to "0" in binary(0 in numeric) so then we will add "0" in the front of the answer string and carry will remain "0".

    • else if string1[i] != string2[i] - In the last condition if any one of the values in both the string at the current index is "1" and another one is "0" then we are checking the value of carrying

      • If carry is "1" then we have to add two "1" which is equal to "10" in binary(2 in numeric) so then we will add "0" in front of the answer string and carry will remain "1".

      • Else we have to just add one "1" which is equal to "1" in binary(1 in numeric) so then we will add "1" in the front of the answer string and the carry will remain "0".

  • Once the above loop ends then we are checking that the carry is "1" or not. If yes then we are adding it to the end of the answer string and returning it.

Output

The numeric representation of 10101 is 21.
The numeric representation of 100111 is 39.
The binary addition of 10101 and 100111 is 111100 whose value in numeric is 60.

This is all about adding two binary strings and their code in Golang. To learn more about Golang you can explore this tutorials.

Updated on: 2022-08-26T08:25:40+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements