golang:对非常长的二进制位串表示的按位运算

dar*_*l75 3 string bit go bitwise-operators

作为练习,在输入中我得到2个非常大的字符串,其中包含长二进制表示,这里有一个短的但可能有超过100位:

11100
00011
Run Code Online (Sandbox Code Playgroud)

输出按位OR(作为字符串)

11111
Run Code Online (Sandbox Code Playgroud)

我的方法是解析每个字符串字符并进行按位OR并构建一个新字符串,但它太长而无法处理大条目而且无效.

然后ParseInt方法被限制为64位长度

num1, err:= strconv.ParseInt("11100", 2, 64)
num2, err:= strconv.ParseInt("00011", 2, 64)
res := num1 | num2
Run Code Online (Sandbox Code Playgroud)

如何处理2字符串二进制表示之间的按位OR?

Tim*_*per 7

可以通过进行字符比较创建结果按位OR字符串,也可以使用执行任意大型数字操作math/big.以下是此类操作的示例:

package main

import "fmt"
import "math/big"

func main() {
    num1 := "11100"
    num2 := "00011"

    var bigNum1 big.Int
    var bigNum2 big.Int
    var result big.Int

    if _, ok := bigNum1.SetString(num1, 2); !ok {
        panic("invalid num1")
    }
    if _, ok := bigNum2.SetString(num2, 2); !ok {
        panic("invalid num2")
    }
    result.Or(&bigNum1, &bigNum2)

    for i := result.BitLen() - 1; i >= 0; i-- {
        fmt.Print(result.Bit(i))
    }
    fmt.Println()
}
Run Code Online (Sandbox Code Playgroud)

去游乐场