Go 語言的無符號整型(uint)
上個小節(jié)我們主要學習了 Go 語言中的整型 int 數據類型,本小節(jié)主要介紹了 Go 語言中處理無符號的整數的數據類型。
1. 定長類型
序號 | 類型 | 長度 |
---|---|---|
1 | uint8 | 0~255 |
2 | uint16 | 0~65535 |
3 | uint32 | 0~4294967295 |
4 | uint64 | 0~18446744073709551615 |
2. 不定長類型
在 Go 語言中也實現了隨著平臺位數變化而變化的數據類型uint
。一般來說,這個類型在32位的系統(tǒng)中長度和uint32
一致,在64位的系統(tǒng)中長度和uint64
一致。
package main
import (
"fmt"
"math"
)
func main() {
var num uint
num = math.MaxUint64 //將e賦予uint64的最大值:18446744073709551615
fmt.Println(num)
}
在 64 位環(huán)境中執(zhí)行結果:
在 32 位環(huán)境中,因為int
的長度與int32
相等了,只有32位,所以執(zhí)行時會報超出取值范圍的錯誤:
3. 各類型的互相轉換
Go 語言是強類型語言,各個雖然同是無符號整型,但是不同無符號整型的變量不允許直接賦值,需要進行強制類型轉換,同時長度大的無符號整型向長度小的無符號整型轉換時,要考慮溢出問題。而且不同類的整型無法進行運算,想要進行運算必須要進行強制類型轉換,使他們都變成同一類型之后,再運算。舉一個 uint8
和 uint16
類型的變量賦值與計算的例子:
package main
import (
"fmt"
"math"
)
func main() {
var a uint8 = math.MaxUint8
var b uint16 = math.MaxUint8 + 1
fmt.Println(a, b)
a = uint8(b)
fmt.Println(a, b) //因為b長度過長,在轉換為uint8的過程中溢出了
//無符號整型變量可以和常數進行計算
a = a + 1
b = b + 1
fmt.Println(a, b)
//不同類型的無符號整型變量計算必須強轉為相同類型,一般轉換為長度大的來計算
c := uint16(a) + b
fmt.Println(c)
}
輸出結果:
4. 小結
本文主要學習了 Go 語言中的無符號整型的使用,注意高精度向低精度轉失真的風險。