为了账号安全,请及时绑定邮箱和手机立即绑定

golang:对很长的二进制位串表示进行按位运算

golang:对很长的二进制位串表示进行按位运算

Go
青春有我 2021-09-20 20:45:04
作为练习,在输入中,我得到了 2 个非常大的字符串,其中包含长二进制表示,这里是一个短字符串,但可能超过 100 位:例子1110000011按位或输出(作为字符串)11111我的方法是解析每个字符串字符并进行按位或运算并构建一个新字符串,但是在大条目上处理时间太长并且无效。然后 ParseInt 方法被限制为 64 位长度num1, err:= strconv.ParseInt("11100", 2, 64)num2, err:= strconv.ParseInt("00011", 2, 64)res := num1 | num2如何处理 2 个字符串二进制表示之间的按位或?
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您可以通过进行字符比较来创建结果按位 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()

}


查看完整回答
反对 回复 2021-09-20
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

这个怎么样:


package main


import "fmt"


func main(){

    a :=   "01111100"

    b := "1001000110"


    var longest, len_diff int 


    if len(a) > len(b) {

        longest = len(a)

        len_diff = len(a) - len(b)

    } else {

        longest = len(b)

        len_diff = len(b) - len(a)

    }


    temp_slice := make([] byte, longest)


    var a_start, b_start int


    if len(a) > len(b) {

        for i := 0; i < len_diff; i++ {

            temp_slice[i] = a[i]

        }

        a_start = len_diff


    } else {

        for i := 0; i < len_diff; i++ {

            temp_slice[i] = b[i]

        }

        b_start = len_diff

    }


    for i := 0; i < (longest - len_diff); i++ {

        if a[a_start + i] == '1' ||  b[b_start + i] == '1' {

            temp_slice[len_diff + i] = '1'

        } else {

            temp_slice[len_diff + i] = '0'

        }

    }


    fmt.Println(string(temp_slice))

}


查看完整回答
反对 回复 2021-09-20
  • 3 回答
  • 0 关注
  • 327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信