我尝试使用此代码,但给出了一个错误:常量100000000000000000000000溢出int64
我怎么才能解决呢?
// Initialise big numbers with small numbers
count, one := big.NewInt(100000000000000000000000), big.NewInt(1)发布于 2015-06-14 19:10:27
例如:
count,one := new(big.Int), big.NewInt(1)
count.SetString("100000000000000000000000",10)链接:http://play.golang.org/p/eEXooVOs9Z
发布于 2015-10-25 09:29:09
它不能工作,因为在幕后,big.NewInt实际上是在分配一个int64。要分配给big.NewInt的数字需要超过64位才能存在,因此失败了。
但是,如果您想在MaxInt64下面添加两个大数字,那么您可以这样做!即使和大于MaxInt64。下面是我刚刚编写的一个示例(B):
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 );
}其结果是:
count: 10000000000000000000
max int64: 9223372036854775807现在,如果您仍然对NewInt在引擎盖下的工作方式感到好奇,下面是您使用的函数,摘自Go的文档:
// NewInt allocates and returns a new Int set to x.
func NewInt(x int64) *Int {
return new(Int).SetInt64(x)
}资料来源:
https://stackoverflow.com/questions/30833314
复制相似问题