2-5 Go --- 基本數(shù)據(jù)類型 (數(shù)字類型之 int 整形,浮點(diǎn)數(shù) float)

一、數(shù)字類型

  • 整形、浮點(diǎn)數(shù)、復(fù)數(shù)。
  • 不同類型的數(shù)字不能做運(yùn)算。

二、整形分為兩大類:

  • 按長(zhǎng)度分為:int —— int8、int16、int32、int64。
  • 無符號(hào)整形:uint —— uint8、uint16、uint32、uint64。

  • int/uint 類型有:int8/uint8、int16/uint16、int32uint32、int64/uint64。
  • int8/uint8 大小是 1字節(jié)。
  • int16/uint16 大小是 2字節(jié)。
  • int32/uint32 大小是4字節(jié)。
  • int64/uint64 大小是8字節(jié)。
  • int 和 uint 可以根據(jù)操作系統(tǒng)的位數(shù)調(diào)節(jié) int/uint 對(duì)應(yīng)的類型。32位的操作系統(tǒng)對(duì)應(yīng) int32/uint32(4字節(jié)),64位的操作系統(tǒng)對(duì)應(yīng) int64/uint64(8字節(jié))。
  • fmt.Printf("%T",變量名) —— 查看變量類型。
  • "\n":轉(zhuǎn)譯字符,換行符。
package main

import "fmt"

func main() {
    var n1 int8 = 10      // int8 類型賦值 10
    var n2 int16 = 10      // int16 類型賦值 10
    var n3 int32 = 10      // int32 類型賦值 10
    var n4 int64 = 10      // int64 類型賦值 10
    fmt.Println(n1, n2, n3, n4)      // int8、int16、int32、int64都是輸出10

    // fmt.Printf()括號(hào)里分兩部分,前面第一部分字符串形式輸出,第二部分變量名。
    // "%T":查看值類型。第一部分有多少個(gè) %T,第二部分就對(duì)應(yīng)多少個(gè)變量名。
    fmt.Printf("%T,%T,%T,%T\n", n1, n2, n3, n4)      
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
10 10 10 10
int8,int16,int32,int64
  • 同類型進(jìn)行運(yùn)算。
package main

import "fmt"

func main() {
    var n1 int8 = 10
    var n11 int8 = 20 
    fmt.Println("n1 + n11 =", n1+n11)
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
n1 + n11 = 30
  • 不同類型的不能運(yùn)算。
package main

import "fmt"

func main() {
    var n1 int8 = 10
    var n2 int16 = 10   
    fmt.Println("n1 + n2 =", n1+n2)      //不同類型相加會(huì)報(bào)錯(cuò) 。
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
# command-line-arguments
.\main.go:13:29: invalid operation: n1 + n2 (mismatched types int8 and int16)
// 提示 int8 和 int16 類型不匹配。
  • 如果一定要進(jìn)行不同類型的運(yùn)算,需要強(qiáng)制類型轉(zhuǎn)換。
    類型(變量名/值),強(qiáng)制轉(zhuǎn)換類型。
package main

import "fmt"

func main() {
    var n1 int8 = 10
    var n2 int16 = 10

    // int8(n2) ,強(qiáng)制把 n2 的 int16 轉(zhuǎn)換為 int8。
    // 這樣n1 和 n2 都是 int8,同類型可以進(jìn)行運(yùn)算。
    fmt.Println("n1 + n2 =", n1+int8(n2))      

    // int16(n1) ,強(qiáng)制把 n1 的 int8 轉(zhuǎn)換為 int16。
    // 這樣n1 和 n2 都是 int16,同類型可以進(jìn)行運(yùn)算。
    fmt.Println("n2 + n1 =", n2+int16(n1))
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
n1 + n2 = 20
n2 + n1 = 20
  • int型 是 int8、int16、int32、int64 的統(tǒng)稱。也有 int 這個(gè)類型,int 可以根據(jù)操作系統(tǒng)的位數(shù)調(diào)節(jié) int 對(duì)應(yīng)的類型。32位的操作系統(tǒng)對(duì)應(yīng) int32(int32類型是4字節(jié)),64位的操作系統(tǒng)對(duì)應(yīng) int64(int64類型是8字節(jié))。
package main

import "fmt"

func main() {
    var n5 int = 10
    fmt.Printf("%T\n", n5)      // 查看變量類型
}
## 輸出結(jié)果
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
int      // n5 是 int 類型。
  • int 類型的值范圍。int 是有符號(hào)類型,它的值可以是負(fù)數(shù)也可以是正數(shù)。為什么不是一個(gè) int 類型代表整個(gè)整數(shù)類型,而有 int8、int16、int32、int64之分。從他們的值范圍也可以看出,當(dāng)存儲(chǔ)100這個(gè)數(shù)值時(shí),不需要用到 int32 和 int64 這么大的內(nèi)存存儲(chǔ)空間,善于管控資源。通過 math 包下的方法可以查看 int 類型值的范圍。
package main

import (
    "fmt"
    "math"      //導(dǎo)入math 包
)

func main() {
    fmt.Println(math.MinInt8, " to ", math.MaxInt8)      // int8值的范圍
    fmt.Println(math.MinInt16, " to ", math.MaxInt16)       // int16值的范圍
    fmt.Println(math.MinInt32, " to ", math.MaxInt32)       // int32值的范圍
    fmt.Println(math.MinInt64, " to ", math.MaxInt64)       // int64值的范圍
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
-128  to  127
-32768  to  32767
-2147483648  to  2147483647
-9223372036854775808  to  9223372036854775807
  • 超出相應(yīng) int 類型的值范圍會(huì)報(bào)錯(cuò),這就需要更大的 int 類型存儲(chǔ)數(shù)值。
package main

import "fmt"

func main() {
    var n1 int8 = 128
    var n11 int8 = -129
    fmt.Println(n1, n11)
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
# command-line-arguments

 // 常量128溢出 int8,溢出就是超過了 int8 的值范圍。
.\main.go:7:6: constant 128 overflows int8   
 // 常量-129溢出 int8,溢出就是超過了 int8 的值范圍。  
.\main.go:8:6: constant -129 overflows int8

無符號(hào)整形:uint —— uint8、uint16、uint32、uint64,無符號(hào)型是從 0 到 正數(shù),非負(fù)數(shù)。

uint 類型的值范圍:
uint8  : 0 到 255 
uint16 : 0 到 65535 
uint32 : 0 到 4294967295 
uint64 : 0 到 18446744073709551615 

  • 浮點(diǎn)數(shù) —— 分為兩大類:
  • float32:float32 的浮點(diǎn)數(shù)最大范圍約為 3.4e38,可以使用math.MaxFloat32 查看最大值。
  • float64:float64 的浮點(diǎn)數(shù)最大范圍約為 1.8e308,可以使用math.MaxFloat64 查看最大值。
package main

import (
    "fmt"
    "math"      //導(dǎo)入 math 包
)

func main() {
    fmt.Println(math.MaxFloat32)     //賦值 Float32 最大值到常量 fMax32。
    fmt.Println(math.MaxFloat64)     //賦值 Float64 最大值到常量 fMax64。

}

##輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
3.4028234663852886e+38      //輸出 float32 最大值
1.7976931348623157e+308    //輸出 float64 最大值
  • 沒有定義 float 類型,默認(rèn)類型是 Float64
package main

import "fmt"

func main() {
    var f1 = 3.14
    fmt.Printf("%T", f1)      //輸出 f1 變量類型
}
##輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
float64      //沒有定義類型的 float 默認(rèn)類型是 float64
  • float32/64 的零值是 0。
package main

import (
    "fmt"
)

func main() {
    var f1 float32      //定義 float32 不賦值
    var f2 float64      //定義 float64 不賦值
    fmt.Println(f1)
    fmt.Println(f2)
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
0      //float32 零值為0
0      //float64 零值為0
  • float32 和 float64 類型不一樣,不能進(jìn)行運(yùn)算。
package main

import (
    "fmt"
)

func main() {
    var f1 float32 = 1.3
    var f2 float64 = 3.14
    fmt.Println(f1 + f2)    
}
//輸出結(jié)果:
# command-line-arguments

//f1 和 f2,float32 和 float64 類型不匹配。
.\main.go:10:17: invalid operation: f1 + f2 (mismatched types float32 and float64)      
  • 如果 float32 和 float64 要運(yùn)算,也要強(qiáng)制類型轉(zhuǎn)換。
package main

import (
    "fmt"
)

func main() {
    var f1 float32 = 1.3
    var f2 float64 = 3.14
    fmt.Println(f1 + float32(f2))      //強(qiáng)制把 f2 轉(zhuǎn)換為 float32
    fmt.Println(f2 + float64(f1))      //強(qiáng)制把 f1 轉(zhuǎn)換為 float64 
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
4.44      // float32 運(yùn)算結(jié)果
4.439999952316285      // float64 運(yùn)算結(jié)果
  • Printf("%f") 占位符輸出內(nèi)容。
package main

import (
    "fmt"
)

func main() {
    var f2 float64 = 3.145
    // Printf 前面是字符串輸出,%f是 float 浮點(diǎn)型占位符,\n是換行符。
    // 占位符就是先為后面變量的值占住一個(gè)固定的位置,等待后面?zhèn)鬏斪兞窟M(jìn)來。
    //占位符的位置就會(huì)顯示變量的值。 
    fmt.Printf("f2:%f\n", f2)      //%f 的位置顯示 f2 變量的值
    fmt.Printf("f2:%.2f", f2)     //%.2f 的位置只保留2位小數(shù)顯示 f2 變量的值
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
f2:3.145000      //f2的值
f2:3.15      //四舍五入,只保留小數(shù)點(diǎn)后兩位。

  • 復(fù)數(shù) —— 分為兩大類:
  • complex64 和 complex128。
  • 復(fù)數(shù)有實(shí)部和虛部。
package main

import "fmt"

func main() {
    var c1 complex64
    c1 = 3 + 5i      //3是實(shí)部,5i是虛部
    var c2 complex128
    c2 = 4 + 8i
    fmt.Printf("%v,%T\n", c1, c1)      //%v結(jié)構(gòu)體,%T值的類型,\n換行。
    fmt.Printf("%v,%T\n", c2, c2)
}
//輸出結(jié)果:
PS C:\Users\86186\go\src\chapter2\2.5> go run .\main.go
(3+5i),complex64
(4+8i),complex128
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容