下面是代码:
package main
import (
"fmt"
"math"
)
type BiggerInt struct {
Upper int64
Lower int64
}
const (
bigger = 9223372036854775808543522345
divisor64 = 1 << 64
)
func main() {
var x BiggerInt
x.Upper = bigger / divisor64
x.Lower = bigger % divisor64
fmt.Println(x.Lower + (x.Upper * int64(math.Pow(2, 64)))) // expecting 9223372036854775808543522345, got: 543522345
}
如何从x.Lower
和x.Upper
中检索更大的int?
2条答案
按热度按时间4dc9hkyq1#
重要的是要注意,
const
数字是无类型的,并且将根据上下文应用类型。这两个数字都不适合
go
的最大的int64
整数类型,但是下面的数学:避免了任何溢出问题,因为赋值在编译时解决,并且适合
int64
类型。尝试将其重构为原始的(无类型的
bigger
)是不可能的,因为任何基本的go
类型(没有int128
)。因此,使用标准库的math/big
包:https://go.dev/play/p/bHTOssconQa
h43kikqp2#
不清楚你期望的是什么,但如果你不知道,math/big包实现了任意精度的算术(大数字)。