这是我的Go代码:http : //play.golang.org/p/CDUagFZ-rk
package main
import "fmt"
func main() {
var max int = 0
for i := 0; i < 1000000; i++ {
var len int = GetCollatzSeqLen(i)
if len > max {
max = len
}
}
fmt.Println(max)
}
func GetCollatzSeqLen(n int) int {
var len int = 1
for n > 1 {
len++
if n%2 == 0 {
n = n / 2
} else {
n = 3*n + 1
}
}
return len
}
在本地计算机上,运行程序时,输出为525。当我在Go Playground上运行它时,输出为476。
我想知道有什么不同。
这是因为特定于实现的大小为int
32位或64位。用于int64
获得一致的结果。例如,
package main
import "fmt"
func main() {
var max int64 = 0
for i := int64(0); i < 1000000; i++ {
var len int64 = GetCollatzSeqLen(i)
if len > max {
max = len
}
}
fmt.Println(max)
}
func GetCollatzSeqLen(n int64) int64 {
var len int64 = 1
for n > 1 {
len++
if n%2 == 0 {
n = n / 2
} else {
n = 3*n + 1
}
}
return len
}
输出:
525
游乐场:http : //play.golang.org/p/0Cdic16edP
int32所有有符号的32位整数 的集合(-2147483648至2147483647)int64所有有符号的64位整数的集合(-9223372036854775808至9223372036854775807)n位整数的值是n位宽,并使用二进制补码算术表示。
还有一组预先声明的数字类型,具有特定于实现的大小:
uint 与uint大小相同的32位或64位int
要查看特定于实现的大小int
,请运行此程序。
package main
import (
"fmt"
"runtime"
"strconv"
)
func main() {
fmt.Println(
"For "+runtime.GOARCH+" the implementation-specific size of int is",
strconv.IntSize, "bits.",
)
}
输出:
对于amd64,特定于实现的int大小为64位。
在Go Playground上:http://play.golang.org/p/7O6dEdgDNd
对于amd64p32,特定于实现的int大小为32位。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句