天天看點

Go語言學習筆記-05數值類型

作者:閑漁一下

整形

平台無關整形:在不同cpu架構或作業系統下長度是一緻的

1.有符号整形

int8,int16,int32,int64

2.無符号整形

uint8,uint16,uint32,uint64

平台有關整形:在不同cpu架構或作業系統下長度是不一緻的

1.有符号整形:int

2.無符号整形:uint

3.無符号整形:uintptr,大到足以存儲任意一個指針的值

可以使用unsafe包下的SizeOf函數擷取資料類型的長度

ch05/main.go

package main

import (
 "fmt"
 "unsafe"
)

func main() {
 a, b := int(5), uint(5)
 var c uintptr = 0x123456
 fmt.Println("int的長度為", unsafe.Sizeof(a))
 fmt.Println("uint的長度為", unsafe.Sizeof(b))
 fmt.Println("uintptr的長度為", unsafe.Sizeof(c))
}           

輸出

int的長度為 8
uint的長度為 8   
uintptr的長度為 8           

字面值

十進制:10

八進制:以0開頭,010

十六進制:以0x或0X開頭,0x10,0X10

Go 1.13版本增加以下表示:

二進制:以0b或0B開頭,0b10,0B10

八進制:以0o或0O開頭,0o10,0O10

增加分隔符_将數字分組,或者分割字首

十進制:1_0_0

二進制:0b_1000_1000

八進制:0o_100

十六進制:0x_01_01

ch05/numberliteral/main.go

package main

import (
 "fmt"
)

func main() {
 d1 := 10      // 十進制
 d2 := 1_0     // 十進制
 d3 := 0010    // 八進制,表示十進制的8
 d4 := 00_10   // 八進制,表示十進制的8
 d5 := 0x10    // 十六進制,表示十進制的16
 d6 := 0x_10   // 十六進制,表示十進制的16
 d7 := 0b0010  // 二進制,表示十進制的2
 d8 := 0b_0010 // 二進制,表示十進制的2

 fmt.Println("d1 10的值為", d1)
 fmt.Println("d2 1_0的十進制值為", d2)
 fmt.Println("d3 0010的十進制值為", d3)
 fmt.Println("d4 00_10的十進制值為", d4)
 fmt.Println("d5 0x10的十進制值為", d5)
 fmt.Println("d6 0x_10的十進制值為", d6)
 fmt.Println("d7 0b0010的十進制值為", d7)
 fmt.Println("d8 0b_0010的十進制值為", d8)
}           

輸出

d1 10的值為 10
d2 1_0的十進制值為 10   
d3 0010的十進制值為 8   
d4 00_10的十進制值為 8  
d5 0x10的十進制值為 16  
d6 0x_10的十進制值為 16 
d7 0b0010的十進制值為 2 
d8 0b_0010的十進制值為 2           

格式化輸出

占位符格式%b二進制格式%d十進制格式%o八進制格式%O八進制格式,0o開頭%x十六進制格式,小寫%X十六進制格式,大寫

ch05/integerformat/main.go

package main

import "fmt"

func main() {
 a := 255

 fmt.Printf("255的二進制表示:%b\n", a)  // 11111111
 fmt.Printf("255的十進制表示:%d\n", a)  // 255
 fmt.Printf("255的八進制表示:%o\n", a)  // 377
 fmt.Printf("255的八進制表示:%O\n", a)  // 0o377
 fmt.Printf("255的十六進制表示:%x\n", a) // ff
 fmt.Printf("255的十六進制表示:%X\n", a) // FF
}           

輸出

255的二進制表示:11111111
255的十進制表示:255  
255的八進制表示:377  
255的八進制表示:0o377
255的十六進制表示:ff 
255的十六進制表示:FF           

浮點數

32位浮點數:float32

64位浮點數:float64

字面值

使用十進制表示浮點值:1.68

整數部分為0可省略:.68

小數部分為0可省略:68.0

科學計數法

十進制:e/E表示底數為10的幂運算,加号可省略

1.68e+2 表示 1.68*10^2 = 168

十六進制:p/P表示底數為2的幂運算,整數和小數以十六進制表示,指數以十進制表示,加号可省略

0x1.p+2 表示 1.0 * 2^2 = 4.0

0x1.ap0 表示 1.625 * 2^0 = 1.625

格式化輸出

占位符格式%f以浮點數原值格式輸出,%.2f保留兩位小數%e十進制的科學計數法%x十六進制的科學計數法

ch05/float/main.go

package main

import "fmt"

func main() {
 a := float32(10.0)
 b := 10.0
 c := .68
 d := 68.
 e := 10.e2
 f := 0x1.ap+0
 g := 1.625

 fmt.Printf("a的值為%f\n", a)
 fmt.Printf("b的值為%f\n", b)
 fmt.Printf("c的值為%f\n", c)
 fmt.Printf("d的值為%f\n", d)
 fmt.Printf("e的值為%f\n", e)
 fmt.Printf("f的值為%f\n", f)
 fmt.Printf("f的值為%.2f\n", f)
 fmt.Printf(".68的十進制科學計數法形式為%e\n", c)
 fmt.Printf("1.625的十六進制科學計數法形式為%x\n", g)
}           

輸出

a的值為10.000000
b的值為10.000000                        
c的值為0.680000                         
d的值為68.000000                        
e的值為1000.000000                      
f的值為1.625000                         
f的值為1.62                             
.68的十進制科學計數法形式為6.800000e-01 
1.625的十六進制科學計數法形式為0x1.ap+00           

筆記位址

github:https://github.com/xianyuyixia/gotrip

繼續閱讀