Go-数据类型之整型--以及fmt占位符

目录

整型

unsafe.Sizeof

int类型转换

整型相关数字字面量语法

 fmt格式普通与整型占位符"占位符"


Go语言中数据类型分为俩大类:基本数据类型复合数据类型

基本数据类型又分为:整型浮点型布尔型字符串(byte、rune)

符合数据类型分为:数组切片结构体函数map通道接口等等

本章着重了解Go数据类型的整型:

整型同样也可以划分为三个类型:


整型

1.有符号整型按长度分为:int8 , int16 , int32 , int64

int16对应C语言中的short型、int64对应C语言中的long型 

什么叫做有符号整型呢?---我们以占用一个字节的int8整型来作为例子

符号位 1 2 3 4 5 6 7
0/1(0代表负数---1代表x x x x x x x x

这样的话,就奠定了它的存储范围:

类型 范围 占用空间
int8 (-128-127)        -2的7次方-2的7次方减一 1字节
int16 (-32768-32767)        -2的15次方-2的15次方减一 2字节
int32 (-2147483648-2147483647)        -2的31次方-2的31次方减一 4字节
int64 (-9223372036854775808-9223372036854775807) -2的63次方-2的63次方减一 8字节

2.无符号整型uint分为:uint8,uint16,uint32,uint64

我们依然来看一下uint类型的uint8存储:

0 1 2 3 4 5 6 7
x x x x x x x x

 可以看出来uint类型是没有符号的

类型 范围 占用空间
uint8 (0-255)       0-2的8次方减一 1字节
uint16 (0-65535)       0-2的16次方减一 2字节
uint32 (0-4294967295)        0-2的32次方减一 4字节
uint64 (0-18446744073709551615) 0-2的64次方减一 8字节

3.无符号整型-用于存放指针uintptr 


unsafe.Sizeof

unsafe.Sizeof可以用来查看不同长度的整型在内存中的存储空间

(需要导入unsafe包)

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var num int16 = 888
	var num1 int8 = 20
	fmt.Println(unsafe.Sizeof(num))
	fmt.Println(unsafe.Sizeof(num1))
}

 我们打印出来的就是它的占用空间(字节)了

什么是字节?---

字节(Byte)是计算机数据的基本存储单位

8bit(位) = 1Byte(字节)

1024Byte = 1KB

1024KB = 1MB        ......


int类型转换

假如我们现在遇到了这样一个问题:

我们想要把int16类型的数据与int32类型的数据相加,我们发现已经报错了 

 长度不同的数据类型是不能进行相加的,所以我们想到了数据类型的转换:

var num int16 = 888
var num1 int32 = 8888
fmt.Println(num + int16(num1))
fmt.Println(int32(num) + num1)

 不过在强制转换的同时,我们也需要格外注意高位向地位转换(如果数值太大的话,数据类型开辟的字节空间不能够放下数据,那么就会出错)

eg:

func main() {
	var num int16 = 32767
	var num1 int32 = 8888
	fmt.Println(num + int16(num1))
	fmt.Println(int32(num) + num1)
}

 我们发现16位的空间已经存储不下41655这个数值了,所以结果出错


整型相关数字字面量语法

数字字面量语法方便了我们开发者以二进制、八进制、十六进制、浮点数的格式来定义数字

func main() {
	v := 0b00101101
	fmt.Println(v)
}


 fmt格式普通与整型占位符"占位符"

func main() {
	type Test struct {
		Name string
	}
	var people = Test{Name: "小蜗"}
	num := 666
	fmt.Println(num)

	//%v: 相应值的默认格式
	fmt.Printf("%v\n", num)
	fmt.Printf("%v\n", people)
	//%+v: 打印结构体时,会添加字段名
	fmt.Printf("%+v\n", num)
	fmt.Printf("%+v\n", people)
	//%#v: 相应值的Go语法表示
	fmt.Printf("%#v\n", num)
	fmt.Printf("%#v\n", people)
	//%T: 相应值的类型的Go语法表示
	fmt.Printf("%T\n", num)
	//%%: 字面上的百分号,并非值的占位符
	fmt.Printf("%%\n")
	//%b: 二进制表示
	fmt.Printf("%b\n", num)
	//%c: 相应Unicode码点所表示的字符
	fmt.Printf("%c\n", num)
	//%U: Unicode格式
	fmt.Printf("%U\n", num)
	//%d: 十进制表示
	fmt.Printf("%d\n", num)
	//%o: 八进制表示
	fmt.Printf("%o\n", num)
	//%q: 单引号包裹的字符字面值,由Go语法安全转义
	fmt.Printf("%q\n", num)
	//%x: 十六进制表示,字母形式为小写 a-f
	fmt.Printf("%x\n", num)
	//%X: 十六进制表示,字母形式为大写 A-F
	fmt.Printf("%X\n", num)
}

猜你喜欢

转载自blog.csdn.net/weixin_63836026/article/details/124825401