gpt4 book ai didi

go - Go中的int和int64有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 12:57:53 24 4
gpt4 key购买 nike

我有一个包含整数的字符串(已从文件中读取)。

我正在尝试使用 strconv.ParseInt()string 转换为 intParseInt 要求我提供位大小(位大小 0、8、16、32 和 64 对应于 int、int8、int16、int32 和 int64)。

从文件中读取的整数很小(即它应该适合正常的 int)。但是,如果我传递 0 的位大小,我会得到 int64 类型的结果(可能是因为我在 64 位操作系统上运行)。

为什么会这样?我怎样才能得到一个正常的int? (如果有人对我何时以及为什么应该使用不同的 int 类型有一个快速入门,那就太棒了!)

编辑:我可以使用 int([i64_var]) 将 int64 转换为普通 int。但我仍然不明白为什么 ParseInt() 在我请求位大小为 0 时给了我一个 int64。

最佳答案

func ParseInt(s string, base int, bitSize int) (i int64, err error)

ParseInt 总是返回 int64

bitSize 定义值的范围。

If the value corresponding to s cannot be represented by a signed integer of the given size, err.Err = ErrRange.

http://golang.org/pkg/strconv/#ParseInt

type int int

int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.

http://golang.org/pkg/builtin/#int

所以 int 将来可能会大于 32 位,或者在某些系统上,例如 C 中的 int

我猜在某些系统上 int64 可能比 int32 更快,因为该系统仅适用于 64 位整数。

以下是 bitSize 为 8 时的错误示例:

http://play.golang.org/p/_osjMqL6Nj

package main

import (
"fmt"
"strconv"
)

func main() {
i, err := strconv.ParseInt("123456", 10, 8)
fmt.Println(i, err)
}

关于go - Go中的int和int64有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com