Golang溢出int64

时间:2015-06-14 19:00:07

标签: go biginteger int64

我尝试使用此代码,但给出了一个错误:常量100000000000000000000000溢出int64

我该如何解决?

// Initialise big numbers with small numbers
count, one := big.NewInt(100000000000000000000000), big.NewInt(1)

2 个答案:

答案 0 :(得分:6)

例如:

count,one := new(big.Int), big.NewInt(1)
count.SetString("100000000000000000000000",10)

链接: http://play.golang.org/p/eEXooVOs9Z

答案 1 :(得分:2)

它不会起作用,因为在幕后,big.NewInt实际上正在分配一个int64。您要分配给big.NewInt的数量需要超过64位才能存在,因此失败。

但是,如果想要在MaxInt64下添加两个大数字,那么有多大,你可以做到!即使总和大于MaxInt64。这是我刚写的一个例子(http://play.golang.org/p/Jv52bMLP_B):

strlen(arr)

结果是:

func main() {
    count := big.NewInt(0);

    count.Add( count, big.NewInt( 5000000000000000000 ) );
    count.Add( count, big.NewInt( 5000000000000000000 ) );

    //9223372036854775807 is the max value represented by int64: 2^63 - 1
    fmt.Printf( "count:     %v\nmax int64:  9223372036854775807\n", count );
}

现在,如果您仍然对NewInt的工作原理感到好奇,那么以下是您使用的功能,取自Go的文档:

count:     10000000000000000000
max int64:  9223372036854775807

来源:

https://golang.org/pkg/math/big/#NewInt

https://golang.org/src/math/big/int.go?s=1058:1083#L51