string - 戈朗 : bitwise operation on very long binary bit string representation

标签 string go bit bitwise-operators

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

例子

11100
00011

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

11111

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

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

num1, err:= strconv.ParseInt("11100", 2, 64)
num2, err:= strconv.ParseInt("00011", 2, 64)
res := num1 | num2

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

最佳答案

可以通过字符比较创建结果按位或字符串,或者您可以使用 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()
}

Go Playground

关于string - 戈朗 : bitwise operation on very long binary bit string representation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997600/

相关文章:

arrays - 语法错误 : unexpected semicolon or newline, 期待 }

C - 需要比较 int 的最低位 `n` 是否相等

gettext中的php字符串变量

c# - 我应该如何在 C# 中设计字符串验证类?

c# - 字符串变量可以设置多少个字符?

string - 可选类型 'String?' 的值未解包;你的意思是使用 '!' 还是 '?' 在 Swift 2.0 中使用 Parse

go - 创建补丁以添加 kubernetes 注释

map - 你如何将 TCP 连接对象传递给其他 Go 模块?

integer - EDSAC - 17 位和 35 位整数

c++ - 在 C/C++ 中向左旋转