1. 程式人生 > GO語言入門 >10 Go 的整型(int)

10 Go 的整型(int)

還記得我們之前在第 7 小節和第 8 小節中提到的變數資料型別的概念嗎?從這個小節開始到後面的幾個小節中我們都會進行對 Go 語言中的資料型別相關知識點進行講解,本節課我們主要講解一下 Go 語言中處理帶符號的整數的資料型別。

1. 定長型別

在 Go 語言中整形資料型別被細緻地劃分為了下面幾種,根據可以儲存資料的長度分為:

序號 型別 長度
1 int8 -128~127
2 int16 -32768~32767
3 int32 -2147483648~2147483647
4 int64 -9223372036854775808~9223372036854775807

2. 不定長型別

在 Go 語言中也實現了隨著平臺位數變化而變化的資料型別int。一般來說,這個型別在32位的系統中長度和int32一致,在64位的系統中長度和int64一致。

package main

import (
    "fmt"
    "math"
)

func main() {
    var num int
    num = math.MaxInt64//將e賦予int64的最大值:9223372036854775807
    fmt.Println(num)
}

在 64 位作業系統環境中執行結果:

圖片描述

64 位作業系統執行結果

在 32位 作業系統環境中,因為int的長度與int32

相等了,只有32位,所以執行會報超出取值範圍的錯誤:

圖片描述

32 位作業系統執行結果

3. 各型別的互相轉換

Go 語言是強型別語言,各個雖然同是整型,但是不同整型的變數不允許直接賦值,需要進行強制型別轉換,同時長度大的整型向長度小的整型轉換時,要考慮溢位問題。而且不同類的整型無法進行運算,想要進行運算必須要進行強制型別轉換,使他們都變成同一型別之後,再運算。舉一個int8int16型別的變數賦值與計算的例子:

package main

import (
    "fmt"
    "math"
)

func main() {
    var a int8 = math.MaxInt8
    var
b int16 = math.MaxInt8 + 1 fmt.Println(a, b) a = int8(b) fmt.Println(a, b) //因為b長度過長,在轉換為int8的過程中溢位了 //整型變數可以和常數進行計算 a = a + 1 b = b + 1 fmt.Println(a, b) //不同型別的整型變數計算必須強轉為相同型別,一般轉換為長度大的來計算 c := int16(a) + b fmt.Println(c) }

輸出結果:

圖片描述

各型別互相轉換輸出結果

3. 小結

這一小節中我們主要介紹了有符號整形資料型別,整形資料型別根據可以儲存的資料長度分為了: int8int16int32int64 ,我們在使用的時候要根據條件需求來決定變數的資料型別,同時也要注意高精度向低精度轉失真的風險。