有没有更有效的乘法字节数组的方法?

时间:2019-04-17 04:33:12

标签: go bson

我开发了Golang软件包BESON,用于进行大数运算。

Multiply操作码:

func Multiply(a []byte, b []byte) {
    ans := make([]byte, len(a) + len(b))
    bits := nbits(b)

    var i uint
    for i = bits - 1; int(i) >= 0; i-- {
        byteNum := i >> 3
        bitNum := i & 7

        LeftShift(ans, 1, 0)
        if (b[byteNum] & (1 << bitNum)) > 0 {
            Add(ans, a)
        }
    }
    copy(a, ans)
}

我的方法是将a的每b个乘以加起来。 有没有更有效的方法来实现Multiply

修改

BESON包在字节数组中代表一个大数字。例如,它代表大小为16的字节数组中的一个128位无符号整数。因此,当进行两个128位无符号整数相乘时,它实际上是在将两个字节数组相乘。

示例:

  • 输入:ab
a = []byte{ 204, 19, 46, 255, 0, 0, 0, 0 }
b = []byte{ 117, 10, 68, 47, 0, 0, 0, 0 }
Multiply(a, b)
fmt.Println(a)
  • 输出:a(结果将写回到a
[60 4 5 35 76 72 29 47]

0 个答案:

没有答案