Golangにおける整数値(integer)

Goは整数データ型を広範囲にサポートしています。では、それらが何であるかを見ていきましょう。

Goの符号付き整数(integer)

Golangがサポートする符号付き整数型は以下のとおりです。

int88ビットの符号付き整数で、範囲は-128から127まで。
int1616ビットの符号付き整数で、範囲は-32768~32767。
int3232ビットの符号付き整数で、範囲は-2147483648~2147483647。
int6464ビットの符号付き整数で、範囲は-9223372036854775808~9223372036854775807。

Goの符号なし整数(integer)

Golangがサポートする符号なし整数型は以下のとおりです。

uint80から255までの8ビット符号なし整数。
uint160 から 65535 までの 16 ビット符号なし整数。
uint320 から 4294967295 までの 32 ビット符号なし整数。
uint640 から 18446744073709551615 までの 64 ビット符号なし整数。

Goにおける整数のオーバーフロー

型を割り当てた後、型の範囲より大きな数値を使って割り当てると、失敗します。

以下のコードは、まさにそれを示しているプログラムです。

package main
 
import (
    "fmt"
)
 
func main() {
    var x uint8
    fmt.Println("Throws integer overflow")
    x = 285       // uint8の範囲は0〜255だから失敗する
}

Goの型変換

現在の範囲より低い範囲を持つ型に変換すると、データ損失が発生します。

型変換を行う関数として、変数名を直接使って型キャストを行います。

package main
 
import (
    "fmt"
)
 
func main() {
    var x int32
    var y uint32     // range 0 to 4294967295
    var z uint8      // range 0 to 255

    x = 26700
    y = uint32(x)       // 数値が範囲内であるため、データが保存される
    z = uint8(x)        // 範囲外変換のためデータが損失する
    fmt.Println(y, z)
}

出力結果は以下の通りです。

26700 76
タイトルとURLをコピーしました