首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang溢出int64

Golang溢出int64
EN

Stack Overflow用户
提问于 2015-06-14 19:00:06
回答 2查看 6.7K关注 0票数 8

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

我怎么才能解决呢?

代码语言:javascript
复制
// Initialise big numbers with small numbers
count, one := big.NewInt(100000000000000000000000), big.NewInt(1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-14 19:10:27

例如:

代码语言:javascript
复制
count,one := new(big.Int), big.NewInt(1)
count.SetString("100000000000000000000000",10)

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

票数 9
EN

Stack Overflow用户

发布于 2015-10-25 09:29:09

它不能工作,因为在幕后,big.NewInt实际上是在分配一个int64。要分配给big.NewInt的数字需要超过64位才能存在,因此失败了。

但是,如果您想在MaxInt64下面添加两个大数字,那么您可以这样做!即使和大于MaxInt64。下面是我刚刚编写的一个示例(B):

代码语言:javascript
复制
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 );
}

其结果是:

代码语言:javascript
复制
count:     10000000000000000000
max int64:  9223372036854775807

现在,如果您仍然对NewInt在引擎盖下的工作方式感到好奇,下面是您使用的函数,摘自Go的文档:

代码语言:javascript
复制
// NewInt allocates and returns a new Int set to x.
func NewInt(x int64) *Int {
    return new(Int).SetInt64(x)
}

资料来源:

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30833314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档