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
一致。
代碼塊
- 1?
package main
- 2
- 3?
import (
- 4? ? ?
"fmt"
- 5? ? ?
"math"
- 6?
)
- 7
- 8?
func main() {
- 9? ? ? ?
var num int
- 10? ? ?
num = math.MaxInt64//將e賦予int64的最大值:9223372036854775807
- 11? ? ?
fmt.Println(num)
- 12?
}
在 64 位操作系統環境中執行結果:
在 32位 操作系統環境中,因為int
的長度與int32
相等了,只有32位,所以執行會報超出取值范圍的錯誤:
3. 各類型的互相轉換
Go 語言是強類型語言,各個雖然同是整型,但是不同整型的變量不允許直接賦值,需要進行強制類型轉換,同時長度大的整型向長度小的整型轉換時,要考慮溢出問題。而且不同類的整型無法進行運算,想要進行運算必須要進行強制類型轉換,使他們都變成同一類型之后,再運算。舉一個int8
和int16
類型的變量賦值與計算的例子:
代碼塊
- 1?
package main
- 2
- 3?
import (
- 4? ? ?
"fmt"
- 5? ? ?
"math"
- 6 ?
)
- 7
- 8?
func main() {
- 9? ? ? ?
var a int8 = math.MaxInt8
- 10? ? ?
var b int16 = math.MaxInt8 + 1
- 11? ? ?
fmt.Println(a, b)
- 12
- 13? ? ?
a = int8(b)
- 14? ? ?
fmt.Println(a, b) //因為b長度過長,在轉換為int8的過程中溢出了
- 15
- 16? ? ?
//整型變量可以和常數進行計算
- 17? ? ?
a = a + 1
- 18? ? ?
b = b + 1
- 19? ? ?
fmt.Println(a, b)
- 20
- 21? ? ?
//不同類型的整型變量計算必須強轉為相同類型,一般轉換為長度大的來計算
- 22? ? ?
c := int16(a) + b
- 23? ? ?
fmt.Println(c)
- 24 ?
}
輸出結果:
3. 小結
這一小節中我們主要介紹了有符號整形數據類型,整形數據類型根據可以存儲的數據長度分為了:?int8
?、?int16
?、?int32
?、?int64
?,我們在使用的時候要根據條件需求來決定變量的數據類型,同時也要注意高精度向低精度轉失真的風險。
文章來源于網絡,侵刪!