1. 程式人生 > GO語言入門 >11 Go 的無符號整型(uint)

11 Go 的無符號整型(uint)

上個小節我們主要學習了 Go 語言中的整型 int 資料型別,本小節主要介紹了 Go 語言中處理無符號的整數的資料型別。

1. 定長型別

序號 型別 長度
1 uint8 0~255
2 uint16 0~65535
3 uint32 0~4294967295
4 uint64 0~18446744073709551615

2. 不定長型別

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

package main

import (
    "fmt"
    "math"
) func main() { var num uint num = math.MaxUint64 //將e賦予uint64的最大值:18446744073709551615 fmt.Println(num) }

在 64 位環境中執行結果:

圖片描述

64 位作業系統執行結果

在 32 位環境中,因為int的長度與int32相等了,只有32位,所以執行時會報超出取值範圍的錯誤:

圖片描述

64 位作業系統執行結果

3. 各型別的互相轉換

Go 語言是強型別語言,各個雖然同是無符號整型,但是不同無符號整型的變數不允許直接賦值,需要進行強制型別轉換,同時長度大的無符號整型向長度小的無符號整型轉換時,要考慮溢位

問題。而且不同類的整型無法進行運算,想要進行運算必須要進行強制型別轉換,使他們都變成同一型別之後,再運算。舉一個 uint8uint16 型別的變數賦值與計算的例子:

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 語言中的無符號整型的使用,注意高精度向低精度轉失真的風險。