1. ホーム
  2. go

[解決済み] Goのintとint64の違いは何ですか?

2023-01-11 15:22:49

質問

整数(ファイルから読み込んだもの)を含む文字列があります。

を変換しようとしています。 stringint を使って strconv.ParseInt() . ParseInt はビットサイズを提供することを要求しています(ビットサイズ0、8、16、32、64はint、int8、int16、int32、int64に対応します)。

ファイルから読み込まれた整数は小さいです (つまり、通常の int に収まるはずです)。しかし、ビットサイズ 0 を渡すと、結果はタイプ int64 (おそらく 64 ビット OS 上で実行しているため) の結果が得られます。

なぜこのようなことが起こるのでしょうか?どうすれば通常の int を取得できるのでしょうか (異なる int 型をいつ、なぜ使用すべきかについての簡単な入門書を誰かが持っていれば、それは素晴らしいことです!)。

編集: int64を通常のintに変換するには、次のようにします。 int([i64_var]) . しかし、私はまだなぜ ParseInt() はなぜビットサイズ0を要求しているのにint64を与えているのか、まだ理解していません。

どのように解決するのですか?

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

ParseIntは常に int64

bitSize は値の範囲を定義します。sに対応する値が与えられたサイズの符号付き整数で表現できない場合、err.Err = ErrRangeとなります。

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

type int int

intは少なくとも32ビットの大きさの符号付き整数型です。しかし、これは別個の型であり、例えばint32のようなエイリアスではありません。

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

そこで int は将来的には 32 ビットより大きくなる可能性がありますし、システムによっては int のように32ビットより大きくなる可能性があります。

私は、いくつかのシステムで 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)
}