數字類型--就要學習 Go 語言

前言

數字類型固然是用來表示數字的,分爲整型和浮點型。編程

整型

整型用來存儲整數,Go有幾種不一樣大小的內置整數類型,用於存儲有符號和無符號整數。數組

有符號整型

有符號整型
int類型的大小取決於機器,在32位機器上是32 bits,在64位機器上則是64 bits。

無符號整型

無符號整型
uint的大小也取決於機器。

使用整數值時,除非有充分的理由必須使用符合大小的無符號整數類型,不然應始終使用int數據類型。函數

舉個🌰:學習

medals := []string{"gold", "silver", "bronze"}
for i := len(medals) - 1; i >= 0; i-- {
    fmt.Println(medals[i]) // "bronze", "silver", "gold"
}
複製代碼

程序的意思一眼就能看懂:循環輸出數組的元素。 看下,程序有沒有問題?若是len函數返回一個無符號數,那麼i也將是無符號的uint類型,而後條件i >= 0則永遠爲真。在三次迭代以後,也就是i == 0時,i--語句將不會產生-1,而是變成一個uint類型的最大值(多是2^{64} - 1),而後medals[i]表達式運行時將發生訪問異常。ui

var myInt8 int8 = 97

// 變量不聲明類型,系統默認 int類型
var myInt = 1200

var myUint uint = 500

var myHexNumber = 0xFF  // '0x' or '0X' 前綴 表示16進制數
var myOctalNumber = 034 // '0' 前綴表示8進制數

fmt.Printf("%T\n",myInt)   // %T 輸出變量類型
fmt.Printf("%d, %d, %d, %#x, %#o\n", myInt8, myInt, myUint, myHexNumber, myOctalNumber)
// %後的 # 副詞告訴Printf在用%o、%x或%X輸出時生成0、0x或0X前綴。
複製代碼

輸出: 編碼

還有一種無符號的整數類型 uintptr,沒有指定具體的bit大小可是足以容納指針。 uintptr類型只有在底層編程時才須要,特別是Go語言和C語言函數庫或操做系統接口相交互的地方,咱們之後再講它的用法。

整型別名

Golang還有另外兩種整數類型:byterune,它們分別是uint8int32的別名: spa

在Go中,沒有 char字符類型, byterune用於強調字符而不是整型值。 byte用來表示 ASCII字符, rune表示以UTF-8格式編碼的Unicode碼點。 字符在Go中怎麼表示呢?用單引號括起來,例如: 'A' 字符默認的類型是 rune,因此,若是在聲明一個字符變量時沒有指明類型,Go編譯器會默認是 rune:

var myByte = 'A'
fmt.Printf("%T\n",myByte)
複製代碼

輸出:int32,runeint32的別名嘛,因此輸出int32。 那咱們就直接使用byte指明變量的類型:操作系統

var lastLetter byte = 'Z'
複製代碼

byterune實質上都是整數,例如,byte類型的'A'能夠轉成整型值97;相似的,rune類型的Unicode字符'♥'能夠轉成對應的Unicode碼點U+2665U+用來表示unicode2665是十六進制數值),實質上也是整型。.net

var myByte byte = 'a'
var myRune rune = '♥'
fmt.Printf("%c = %d and %c = %U\n", myByte, myByte, myRune, myRune)
複製代碼

輸出:a = 97 and ♥ = U+2665 上面的例子中,輸出的是byte變量myByte和對應的十進制數字、rune變量myRune和對應的Unicode碼。3d

浮點數

浮點數用戶存儲帶小數點的數字,Go有兩種浮點數float32float64

  • float32,32位,單精度;
  • float64,64位,雙精度;

默認的浮點型是float64,因此,但你初始化一個浮點型的變量而沒有指明是哪一種浮點類型時,編譯器默認是float64

var a = 9715.635      //默認float64
複製代碼

類型轉化

Go的類型系統很是強大,不容許你在表達式中將數字類型混淆。例如,不容許intfloat64類型執行相加操做,甚至連intint64之間也不能:

var a int64 = 4
var b int = a  // 編譯出錯 (Cannot use a (type in64) as type int in assignment)

var c int = 500
var result = a + c // 編譯出錯 (Invalid Operation: mismatched types int64 and int)
複製代碼

與其餘靜態類型語言(如C,C ++和Java)不一樣,Go是不提供任何隱式類型轉換的。好了,若是你非要在不一樣類型的數字之間執行相似相加、相減等操做,怎麼辦?類型轉換,轉換成你須要的類型,語法是這樣的: T(v)T就是目標類型,v是想轉的值:

var a int64 = 4
var b int = int(a)  // 顯式類型轉換

var c float64 = 6.5
// 顯式類型轉換
var result = float64(b) + c  		// Works
複製代碼

輸出:10.5


(全文完)

原創文章,若需轉載請註明出處!
歡迎掃碼關注公衆號「Golang來啦」或者移步 seekload.net ,查看更多精彩文章。

公衆號「Golang來啦」給你準備了一份神祕學習大禮包,後臺回覆【電子書】領取!

公衆號二維碼
相關文章
相關標籤/搜索