回答

收藏

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

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

我有一个包含整数的字符串(已从文件中读取)。6 x  V8 ?5 o! C8 K+ F3 j
我正图转换 string为intusing strconv.ParseInt()。ParseInt要求我提供一个位大小(位大小 0,8,16,32 和 64 对应 int、int8、int16、int32 和 int64)。
. T0 f: p) I$ E1 D$ M. H% M* N从文件中读取的整数很小(即应适合正常 int)。但是,如果我传递的位置大小为 0,就会得到类型结果int64(可能是因为我在 64 位操作系统上操作)。
$ G7 b8 ]# E- Q6 u* N/ {6 v' B* v为什么会这样?我怎样才能得到一个普通的 int?(如果有人告诉我什么时候,为什么要用不同的 int 类型有快速入门,太棒了。!)
! w9 a( Z' ]$ p! _0 ^! @编辑:我可以用 .int64 将 int64 转化为普通 int int([i64_var])。但我仍然不明白为什么为什么ParseInt()当我位大小为 0 时,给我一个 int64。( U( b5 o& J% J% n, F- \9 \! ]/ v
                                                               
2 q1 I9 s6 k( I' A/ ]    解决方案:                                                               
6 n4 t2 j6 b9 g                                                               
    func ParseInt(s string,base int,bitSize int) (i int64,err error)
    & O0 K2 r" Y0 F3 A3 x  c
ParseInt 总是返回 int646 k7 D' }! n: Q3 X6 o2 k
bitSize定义值的范围。如果是 s 相应的值不能用给定大小的符号整数表示, err.Err = ErrRange。
5 m4 m9 J9 y9 P9 n
    type int int* @# Z3 w/ F2 l4 l/ E+ u
int 是一种符号整数类型,尺寸至少为 32 。然而,它是一种独特的类型,而不是 int32 的别名。
3 u5 _$ o6 w; L8 w) O所以int未来可能大于 32 或在某些系统(如intC)。
/ A1 M5 r, R4 V! N+ g我猜在某些系统上int64可能比int因为该系统只适用于 64 位整数更快。
2 i( H' V. h2 x  j这bitSize是 8时的错误示例
8 X1 V3 W# f6 u  `0 M
    package mainimport  "fmt"    "strconv")func main()      i,err := strconv.ParseInt("123456",10,8)    fmt.Println(i,err)}
    4 B  ^5 [; s8 [# a$ T& Y/ Q+ Q
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则