回答

收藏

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

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

我有一个包含整数的字符串(已从文件中读取)。' x/ q* v: T+ N$ O  _' q
我正图转换 string为intusing strconv.ParseInt()。ParseInt要求我提供一个位大小(位大小 0,8,16,32 和 64 对应 int、int8、int16、int32 和 int64)。) X. Z6 |: Q  N7 j2 C
从文件中读取的整数很小(即应适合正常 int)。但是,如果我传递的位置大小为 0,就会得到类型结果int64(可能是因为我在 64 位操作系统上操作)。) Z( w+ ~6 x# X2 i* |2 _, w
为什么会这样?我怎样才能得到一个普通的 int?(如果有人告诉我什么时候,为什么要用不同的 int 类型有快速入门,太棒了。!)
  B1 L. H$ c. @+ S编辑:我可以用 .int64 将 int64 转化为普通 int int([i64_var])。但我仍然不明白为什么为什么ParseInt()当我位大小为 0 时,给我一个 int64。* s/ S1 W# B8 @6 E( E
                                                               
. H0 R; [0 A& `4 B    解决方案:                                                               
/ F% r5 m$ K7 U: \" v, [  l                                                               
    func ParseInt(s string,base int,bitSize int) (i int64,err error)
    . G1 t% e: U8 G" i2 v3 M. T
ParseInt 总是返回 int64
" `! w5 a4 |1 \% ~2 XbitSize定义值的范围。如果是 s 相应的值不能用给定大小的符号整数表示, err.Err = ErrRange。: F2 t- x* J/ |8 M* S
    type int int
    & Q& c1 T% R+ }5 G+ Q
int 是一种符号整数类型,尺寸至少为 32 。然而,它是一种独特的类型,而不是 int32 的别名。9 P* R  t1 K0 U$ P
所以int未来可能大于 32 或在某些系统(如intC)。
5 ], p& l! [2 G' I+ t我猜在某些系统上int64可能比int因为该系统只适用于 64 位整数更快。
- G0 J. ^6 A5 ~) e这bitSize是 8时的错误示例
* j2 H" B* c4 L
    package mainimport  "fmt"    "strconv")func main()      i,err := strconv.ParseInt("123456",10,8)    fmt.Println(i,err)}
    * c  G9 a# p0 X. i6 d) K
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则