回答

收藏

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

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

我有一个包含整数的字符串(已从文件中读取)。
3 A7 M% r! e, V; M0 Q1 H$ Y我正图转换 string为intusing strconv.ParseInt()。ParseInt要求我提供一个位大小(位大小 0,8,16,32 和 64 对应 int、int8、int16、int32 和 int64)。
) k( u6 w$ x4 s7 A* _9 _0 K1 N从文件中读取的整数很小(即应适合正常 int)。但是,如果我传递的位置大小为 0,就会得到类型结果int64(可能是因为我在 64 位操作系统上操作)。. ~$ F. f( a4 z* O8 d4 R
为什么会这样?我怎样才能得到一个普通的 int?(如果有人告诉我什么时候,为什么要用不同的 int 类型有快速入门,太棒了。!)
# W* U8 C& H, q编辑:我可以用 .int64 将 int64 转化为普通 int int([i64_var])。但我仍然不明白为什么为什么ParseInt()当我位大小为 0 时,给我一个 int64。
1 e& O. A1 R* Y& `5 t& {  K                                                               
! B- k7 o" m( `    解决方案:                                                                ) q( J0 Y; X0 l8 V7 S
                                                               
    func ParseInt(s string,base int,bitSize int) (i int64,err error)
    ( i8 k* C9 p2 c6 p# J/ c8 H3 [. I
ParseInt 总是返回 int641 W  x7 O5 a" v7 c9 m. y/ u
bitSize定义值的范围。如果是 s 相应的值不能用给定大小的符号整数表示, err.Err = ErrRange。
/ k/ o9 h$ U; p8 U) u8 o
    type int int
      z' f4 d, M  S9 w7 b3 O/ r7 r
int 是一种符号整数类型,尺寸至少为 32 。然而,它是一种独特的类型,而不是 int32 的别名。
8 u% x5 {0 U5 f1 X5 P% w( I所以int未来可能大于 32 或在某些系统(如intC)。
( ~. W, _+ c( {# E9 _' M6 D我猜在某些系统上int64可能比int因为该系统只适用于 64 位整数更快。
8 X' t  l, K  m3 y这bitSize是 8时的错误示例
) V" R5 [3 U+ b& n0 N0 i& v2 Y0 a0 r
    package mainimport  "fmt"    "strconv")func main()      i,err := strconv.ParseInt("123456",10,8)    fmt.Println(i,err)}
    1 C* l& t# x0 p& [; ?; E
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则