如何在Go语言中添加两个二进制字符串?


本教程将演示如何在Go语言中添加两个二进制字符串。此外,我们将通过示例涵盖并理解添加两个字符串时的所有情况。

示例

  • 假设我们要添加两个二进制字符串“111”和“1011”,它们的数值分别为7和11,相加结果为18,二进制表示为“10010”。现在我们将逐步进行这些字符串的加法运算。

  • 您可以看到字符串“111”的长度小于“1011”,因此我们必须使它们相等,为此,我们可以将“0”添加到较短的字符串中,这样值也会保持不变。“111”的长度小于“1011”,因此我们将添加一个零。

  • 现在字符串看起来像这样:

“0111” and “1011”

算法

  • 步骤1 - 声明将要相加的字符串。

  • 步骤2 - 使用二进制字符串初始化字符串。

  • 步骤3 - 在较短的字符串的开头添加“0”。

  • 步骤4 - 将两个字符串相加并将结果存储到第三个字符串中。

示例

package main // fmt package provides the function to print anything import "fmt" // function which will add the binary strings func binaryAdditionOfStrings(string1, string2 string) string { // checking if the length of the first string is greater then // second then calling the function by swapping the parameters if len(string1) > len(string2) { return binaryAdditionOfStrings(string2, string1) } // finding the difference between the length of the strings difference := len(string2) - len(string1) // making both strings equal by adding 0 in front of a smaller string for i := 0; i < difference; i++ { string1 = "0" + string1 } // initializing a variable carry to keep the track of carry after // each addition carry := "0" // In this variable we will store our final string answer := "" // traversing the strings and adding them by picking the index from the end /* /* For example, we are adding “100” and ”110. So, for the last characters in the string i.e “0” and “0” the first else if condition will run. Then for the middle characters i.e “0” and “1” the last else if condition will run and for the first characters i.e “1” and “1” the first if condition will run. */ for i := len(string1) - 1; i >= 0; i-- { if string1[i] == '1' && string2[i] == '1' { if carry == "1" { answer = "1" + answer } else { answer = "0" + answer carry = "1" } } else if string1[i] == '0' && string2[i] == '0' { if carry == "1" { answer = "1" + answer carry = "0" } else { answer = "0" + answer } } else if string1[i] != string2[i] { if carry == "1" { answer = "0" + answer } else { answer = "1" + answer } } } if carry == "1" { answer = "1" + answer } return answer } func main() { // declaring the strings var string1, string2 string // initializing the strings string1 = "10101" string2 = "100111" result := binaryAdditionOfStrings(string1, string2) // Printing the result of the addition of both the binary strings fmt.Println("The Numeric representation of", string1, "is", "21.") fmt.Println("The Numeric representation of", string2, "is", "39.") fmt.Println("The Binary addition of", string1, "and", string2, "is", result, "whose value in numeric is 60.")
}

在上面的代码中,主要的逻辑位于binaryAdditionOfStrings()函数中,我们将逐行讨论它。

  • if len(string1) > len(string2) {} - 首先,检查第一个字符串的长度是否大于第二个字符串,然后通过交换参数再次调用该函数。

  • difference:= len(string2) - len(string1) - 接下来,我们找到字符串长度的差值,并在较短的字符串中添加那么多零,以使两个字符串的长度相等。

  • carry:= "0" - 现在我们声明进位和结果变量,并在遍历字符串时更新它们。

  • 此步骤包含核心逻辑,我们在此处遍历字符串并从最后一位开始遍历。

    • if string1[i] == '1' && string2[i] == '1' {} - 第一个if条件检查两个字符串中当前索引的值是否为“1”,如果是,则检查进位的值。

      • 如果进位为“1”,则我们必须添加三个“1”,这在二进制中等于“11”(数值为3),因此我们将“1”添加到结果字符串的前面,进位将保持为“1”。

      • 否则,我们只需要添加两个“1”,这在二进制中等于“10”(数值为2),因此我们将“0”添加到结果字符串的前面,并将进位设置为“1”。

    • else if string1[i] == '0' && string2[i] == '0' {} - 现在else if条件检查两个数组中当前索引的值是否都为零,然后检查进位。

      • 如果进位为“1”,则我们必须添加一个“1”和两个“0”,这在二进制中等于“1”(数值为1),因此我们将“1”添加到结果字符串的前面,进位将变为“0”。

      • 否则,我们只需要添加三个“0”,这在二进制中等于“0”(数值为0),因此我们将“0”添加到结果字符串的前面,进位将保持为“0”。

    • else if string1[i] != string2[i] - 在最后一个条件中,如果两个字符串中当前索引的任何一个值为“1”而另一个值为“0”,则检查进位的值。

      • 如果进位为“1”,则我们必须添加两个“1”,这在二进制中等于“10”(数值为2),因此我们将“0”添加到结果字符串的前面,进位将保持为“1”。

      • 否则,我们只需要添加一个“1”,这在二进制中等于“1”(数值为1),因此我们将“1”添加到结果字符串的前面,进位将保持为“0”。

  • 上述循环结束后,我们将检查进位是否为“1”。如果是,则将其添加到结果字符串的末尾并返回。

输出

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.

这就是关于添加两个二进制字符串及其在Go语言中的代码的全部内容。要了解更多关于Go语言的信息,您可以浏览此教程

更新于:2022年8月26日

1K+ 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告