Go 語(yǔ)言的無(wú)符號(hào)整型(uint)
上個(gè)小節(jié)我們主要學(xué)習(xí)了 Go 語(yǔ)言中的整型 int 數(shù)據(jù)類(lèi)型,本小節(jié)主要介紹了 Go 語(yǔ)言中處理無(wú)符號(hào)的整數(shù)的數(shù)據(jù)類(lèi)型。
1. 定長(zhǎng)類(lèi)型
序號(hào) | 類(lèi)型 | 長(zhǎng)度 |
---|---|---|
1 | uint8 | 0~255 |
2 | uint16 | 0~65535 |
3 | uint32 | 0~4294967295 |
4 | uint64 | 0~18446744073709551615 |
2. 不定長(zhǎng)類(lèi)型
在 Go 語(yǔ)言中也實(shí)現(xiàn)了隨著平臺(tái)位數(shù)變化而變化的數(shù)據(jù)類(lèi)型uint
。一般來(lái)說(shuō),這個(gè)類(lèi)型在32位的系統(tǒng)中長(zhǎng)度和uint32
一致,在64位的系統(tǒng)中長(zhǎng)度和uint64
一致。
- 1?
package main
- 2
- 3?
import (
- 4? ? ? ?
"fmt"
- 5? ? ? ?
"math"
- 6?
)
- 7
- 8?
func main() {
- 9? ? ? ??
var num uint
- 10? ? ??
num = math.MaxUint64 //將e賦予uint64的最大值:18446744073709551615
- 11? ? ??
fmt.Println(num)
- 12
}
在 64 位環(huán)境中執(zhí)行結(jié)果:
在 32 位環(huán)境中,因?yàn)?code>int的長(zhǎng)度與int32
相等了,只有32位,所以執(zhí)行時(shí)會(huì)報(bào)超出取值范圍的錯(cuò)誤:
3. 各類(lèi)型的互相轉(zhuǎn)換
Go 語(yǔ)言是強(qiáng)類(lèi)型語(yǔ)言,各個(gè)雖然同是無(wú)符號(hào)整型,但是不同無(wú)符號(hào)整型的變量不允許直接賦值,需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,同時(shí)長(zhǎng)度大的無(wú)符號(hào)整型向長(zhǎng)度小的無(wú)符號(hào)整型轉(zhuǎn)換時(shí),要考慮溢出問(wèn)題。而且不同類(lèi)的整型無(wú)法進(jìn)行運(yùn)算,想要進(jìn)行運(yùn)算必須要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,使他們都變成同一類(lèi)型之后,再運(yùn)算。舉一個(gè)?uint8
?和?uint16
?類(lèi)型的變量賦值與計(jì)算的例子:
- 1
package main?
- 2
- 3?
import (
- 4? ? ? ?
"fmt"
- 5? ? ? ?
"math"
- 6?
)
- 7
- 8 ?
func main() {
- 9? ? ? ? ?
var a uint8 = math.MaxUint8
- 10? ? ? ?
var b uint16 = math.MaxUint8 + 1
- 11? ? ? ?
fmt.Println(a, b)
- 12
- 13? ? ? ?
a = uint8(b)
- 14? ? ? ?
fmt.Println(a, b) //因?yàn)閎長(zhǎng)度過(guò)長(zhǎng),在轉(zhuǎn)換為uint8的過(guò)程中溢出了
- 15
- 16? ? ? ?
//無(wú)符號(hào)整型變量可以和常數(shù)進(jìn)行計(jì)算
- 17? ? ? ?
a = a + 1
- 18? ? ? ?
b = b + 1
- 19? ? ? ?
fmt.Println(a, b)
- 20
- 21? ? ? ?
//不同類(lèi)型的無(wú)符號(hào)整型變量計(jì)算必須強(qiáng)轉(zhuǎn)為相同類(lèi)型,一般轉(zhuǎn)換為長(zhǎng)度大的來(lái)計(jì)算
- 22? ? ? ?
c := uint16(a) + b
- 23? ? ? ?
fmt.Println(c)
- 24?
}
輸出結(jié)果:
4. 小結(jié)
本文主要學(xué)習(xí)了 Go 語(yǔ)言中的無(wú)符號(hào)整型的使用,注意高精度向低精度轉(zhuǎn)失真的風(fēng)險(xiǎn)。
文章來(lái)源于網(wǎng)絡(luò),侵刪!