Go 語(yǔ)言的整型(int)數(shù)據(jù)類(lèi)型
還記得我們之前在第 7 小節(jié)和第 8 小節(jié)中提到的變量數(shù)據(jù)類(lèi)型的概念嗎?從這個(gè)小節(jié)開(kāi)始到后面的幾個(gè)小節(jié)中我們都會(huì)進(jìn)行對(duì) Go 語(yǔ)言中的數(shù)據(jù)類(lèi)型相關(guān)知識(shí)點(diǎn)進(jìn)行講解,本節(jié)課我們主要講解一下 Go 語(yǔ)言中處理帶符號(hào)的整數(shù)的數(shù)據(jù)類(lèi)型。
1. 定長(zhǎng)類(lèi)型
在 Go 語(yǔ)言中整形數(shù)據(jù)類(lèi)型被細(xì)致地劃分為了下面幾種,根據(jù)可以存儲(chǔ)數(shù)據(jù)的長(zhǎng)度分為:
序號(hào) | 類(lèi)型 | 長(zhǎng)度 |
---|---|---|
1 | int8 | -128~127 |
2 | int16 | -32768~32767 |
3 | int32 | -2147483648~2147483647 |
4 | int64 | -9223372036854775808~9223372036854775807 |
2. 不定長(zhǎng)類(lèi)型
在 Go 語(yǔ)言中也實(shí)現(xiàn)了隨著平臺(tái)位數(shù)變化而變化的數(shù)據(jù)類(lèi)型int
。一般來(lái)說(shuō),這個(gè)類(lèi)型在32位的系統(tǒng)中長(zhǎng)度和int32
一致,在64位的系統(tǒng)中長(zhǎng)度和int64
一致。
package main
import (
"fmt"
"math"
)
func main() {
var num int
num = math.MaxInt64//將e賦予int64的最大值:9223372036854775807
fmt.Println(num)
}
在 64 位操作系統(tǒng)環(huán)境中執(zhí)行結(jié)果:
在 32位 操作系統(tǒng)環(huán)境中,因?yàn)?code>int的長(zhǎng)度與int32
相等了,只有32位,所以執(zhí)行會(huì)報(bào)超出取值范圍的錯(cuò)誤:
3. 各類(lèi)型的互相轉(zhuǎn)換
Go 語(yǔ)言是強(qiáng)類(lèi)型語(yǔ)言,各個(gè)雖然同是整型,但是不同整型的變量不允許直接賦值,需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,同時(shí)長(zhǎng)度大的整型向長(zhǎng)度小的整型轉(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è)int8
和int16
類(lèi)型的變量賦值與計(jì)算的例子:
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) //因?yàn)閎長(zhǎng)度過(guò)長(zhǎng),在轉(zhuǎn)換為int8的過(guò)程中溢出了
//整型變量可以和常數(shù)進(jìn)行計(jì)算
a = a + 1
b = b + 1
fmt.Println(a, b)
//不同類(lèi)型的整型變量計(jì)算必須強(qiáng)轉(zhuǎn)為相同類(lèi)型,一般轉(zhuǎn)換為長(zhǎng)度大的來(lái)計(jì)算
c := int16(a) + b
fmt.Println(c)
}
輸出結(jié)果:
3. 小結(jié)
這一小節(jié)中我們主要介紹了有符號(hào)整形數(shù)據(jù)類(lèi)型,整形數(shù)據(jù)類(lèi)型根據(jù)可以存儲(chǔ)的數(shù)據(jù)長(zhǎng)度分為了: int8
、 int16
、 int32
、 int64
,我們?cè)谑褂玫臅r(shí)候要根據(jù)條件需求來(lái)決定變量的數(shù)據(jù)類(lèi)型,同時(shí)也要注意高精度向低精度轉(zhuǎn)失真的風(fēng)險(xiǎn)。