回答

收藏

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

技术问答 技术问答 137 人阅读 | 0 人回复 | 2023-09-12

我有一个包含整数的字符串(已从文件中读取)。7 u" `, @7 S2 E* M2 p
我正图转换 string为intusing strconv.ParseInt()。ParseInt要求我提供一个位大小(位大小 0,8,16,32 和 64 对应 int、int8、int16、int32 和 int64)。. u7 t1 m& z9 p$ Q) l
从文件中读取的整数很小(即应适合正常 int)。但是,如果我传递的位置大小为 0,就会得到类型结果int64(可能是因为我在 64 位操作系统上操作)。
' i; v' I4 g! G  @! l' U为什么会这样?我怎样才能得到一个普通的 int?(如果有人告诉我什么时候,为什么要用不同的 int 类型有快速入门,太棒了。!)
$ A5 W, V$ c* b4 a  G编辑:我可以用 .int64 将 int64 转化为普通 int int([i64_var])。但我仍然不明白为什么为什么ParseInt()当我位大小为 0 时,给我一个 int64。
. F; W: N+ t  H4 u                                                               
7 T7 a3 R  N" i- v. w. C    解决方案:                                                                $ C/ S6 `( e3 i" }2 B9 O* h. h
                                                               
    func ParseInt(s string,base int,bitSize int) (i int64,err error)
    1 v" K. p* U* x! }+ m
ParseInt 总是返回 int64
7 j: W. E8 p& ]. GbitSize定义值的范围。如果是 s 相应的值不能用给定大小的符号整数表示, err.Err = ErrRange。
) v- ^5 |4 ^/ }8 s' E; K
    type int int7 o6 a  U. g6 ^9 J( C* |- O
int 是一种符号整数类型,尺寸至少为 32 。然而,它是一种独特的类型,而不是 int32 的别名。4 E% x2 \- W; O8 ]5 @: H1 ]5 c! m
所以int未来可能大于 32 或在某些系统(如intC)。
# s/ B0 `2 W6 f- y2 l" r2 O) X0 q我猜在某些系统上int64可能比int因为该系统只适用于 64 位整数更快。. y1 j, R% d2 p: |& u9 X: s
这bitSize是 8时的错误示例* `+ L5 }+ g$ _7 k3 c
    package mainimport  "fmt"    "strconv")func main()      i,err := strconv.ParseInt("123456",10,8)    fmt.Println(i,err)}7 B; T( }; [% P
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则