Go语言学习笔记-05数值类型

170 阅读4分钟

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

十六进制:以0x0X开头,0x10,0X10

Go 1.13版本增加以下表示:

二进制:以0b0B开头,0b10,0B10

八进制:以0o0O开头,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:github.com/xianyuyixia…

交流学习

微信号:xianyuyixia

wx_qrcode_258.jpg

微信公众号:闲渔一下

wx_platform.jpg

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情