Golang基础-数据类型-基本数据类型(三)

变量与数据类型

2. 数据类型

变量的数据类型
在这里插入图片描述

2.1 基本数据类型

2.1.0 进制和进制转换

(1)进制的介绍

十进制整数,如:99, -500, 0
八进制整数,要求以 0 开头,如:015
十六进制数,要求 0x 或 0X 开头,如:0x15
二进制:要求0b或者0B开头,如:0b11

几进制:就是逢几进1的问题:

平时实际生活中用的最多的是:十进制
计算机用二进制最多 

在这里插入图片描述

二进制转换为十进制

二进制: 1101
     1*2^3  +   1*2^2   +  0*2^1  +     1*2^0
=    8      +   4       +     0   +      1
=    13 

十进制转换为二进制

十进制  13 

在这里插入图片描述

八进制转换十进制

八进制: 16
    1*8^1 +   6*8^0
=   8     +  6
=   14

十进制转换为八进制

十进制: 14

在这里插入图片描述

八进制转换为十六进制

把十进制当做一个中转站:

八进制—》十进制—》十六进制

实际上根本不用自己转换这么麻烦:我们可以直接用系统中提供给我们的计算器
在这里插入图片描述

2.1.1 整数类型介绍

简单的说,就是用于存放整数值的,比如10,-45,6712等等

(1)有符号整数类型(第一位是1或0,有负数)

在这里插入图片描述

PS:127怎么算出来的?
01111111 -->二进制 ---》转为十进制:
   1*2^6   +   1*2^5  +  1*2^4  +   1*2^3  +   1*2^2  +   1*2^1  +    1*2^0
 = 64      +   32     +    16   +   8      +      4   +    2     +   1
 = 127


PS:-128怎么算出来的?
10000000 --->二进制 --->一看就是个负数 

        10000000 --》负数的二进制
减1:  01111111
取反: 10000000     ---》得到一个正数    2^7 = 128
加负号:-128

代码测试超出范围
在这里插入图片描述

(2)无符号整数类型
在这里插入图片描述

表数范围的边界计算:
11111111= 2^7+127 = 128 + 127 = 255
00000000 = 0
超出边界报错:
在这里插入图片描述

(3)其他整数类型
在这里插入图片描述

PS:Golang的整数类型,默认声明为int类型
在这里插入图片描述

PS :变量占用的字节数
在这里插入图片描述
几种整数类型的代码

package main
// import "fmt"
// import "unsafe"
import(
	"fmt"
	"unsafe"
)
func main(){
    var num1 int8 = 120
	fmt.Println(num1)

	var num2 uint8 = 200
	fmt.Println(num2)

	var num3 = 28
    //Printf函数的作用就是:格式化的,把num3的类型填充到%T的位置上
	fmt.Printf("num3的类型是:%T ", num3)
	//Println()是换行的意思
	fmt.Println()
	fmt.Println(unsafe.Sizeof(num3))
}

(4)这么多整数类型,使用的时候该如何选择呢?

Golang程序中整型变量在使用时,遵守保小不保大的原则,
即:在保证程序正确运行下,尽量使用占用空间小的数据类型
在这里插入图片描述

2.2.2 浮点类型

(1)浮点类型介绍

简单的说,就是用于存放小数值的,比如3.14、0.28、-7.19等等

(2)浮点类型种类
在这里插入图片描述

PS:底层存储空间和操作系统无关
PS:浮点类型底层存储:符号位+指数位+尾数位,所以尾数位只是存了 一个大概,很可能会出现精度的损失。
在这里插入图片描述

代码

package main
import "fmt"

func main(){
     //定义浮点类型的数据
	 var num1 float32 = 3.14
	 fmt.Println(num1)
	 //可以表示正浮点数,也可以表示负浮点数
	 var num2 float32 = -3.14
	 fmt.Println(num2)
	 //浮点数可以用十进制表示形式,也可以用科学计数法表示形式--E--大写小写都可以
	 var num3 float32 = 314E-2
	 fmt.Println(num3)
	 var num4 float32 = 314E+2
	 fmt.Println(num4)
	 var num5 float32 = 314e+2
	 fmt.Println(num5)
	 var num6 float64 = 314e+2
	 fmt.Println(num6)
}

代码

package main
import "fmt"

func main(){
     //定义浮点类型的数据
	 var num1 float32 = 3.14
	 fmt.Println(num1)
	 //可以表示正浮点数,也可以表示负浮点数
	 var num2 float32 = -3.14
	 fmt.Println(num2)
	 //浮点数可以用十进制表示形式,也可以用科学计数法表示形式--E--大写小写都可以
	 var num3 float32 = 314E-2
	 fmt.Println(num3)
	 var num4 float32 = 314E+2
	 fmt.Println(num4)
	 var num5 float32 = 314e+2
	 fmt.Println(num5)
	 var num6 float64 = 314e+2
	 fmt.Println(num6)
     //浮点数可能会有精度的损失,所以通常情况下,建议你使用:float64
	 var num7 float32 = 256.000006
	 fmt.Println(num7)
	 var num8 float64 = 256.000006
	 fmt.Println(num8)

	 //golang中默认的浮点数类型为:float64
	 var num9 = 3.17
	 fmt.Printf("num9对应的默认类型为:%T",num9)
}

在这里插入图片描述

2.2.3 字符类型

【1】Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。
【2】Golang中字符使用UTF-8编码
【3】ASCII码表:
左面是不可见字符 右面是可见字符
在这里插入图片描述

【4】查看UTF-8编码表

http://www.mytju.com/classcode/tools/encode_utf8.asp
在这里插入图片描述

【5】代码

package main
import "fmt"

func main(){
     //定义字符类型的数据
	var c1 byte = 'a'
	fmt.Println(c1)//97
	var c2 byte = '6'
	fmt.Println(c2)//54
	var c3 byte = '('
	fmt.Println(c3 + 20)//40
	//字符类型,本质上就是一个整数,也可以直接参与运算,输出字符的时候,会将对应的码值做一个输出
	//字母,数字,标点等字符,底层是按照ASCII进行存储

	var c4 int = '中'
	fmt.Println(c4)
	//汉子字符,底层对应的是Unicode码值
	//对应的码值为20013,byte类型溢出,能存储的范围:可以用:int
	//总结:Golang的字符对应的使用的是UTF-8编码(Unicode是对应的字符集,UTF-8是Unicode其中的一种编码方案)

	var c5 byte = 'A'
	//想输出对应的字符,就必须采用格式化输出
	fmt.Printf("c5对应的具体的字符为:%c",c5)
}

2.2.4 转义字符

\转义字符:将后面的字母表示为特殊含义

在这里插入图片描述

代码

package main
import "fmt"

func main(){
     //转义字符练习
	 //\n 就是换行的意思
	 fmt.Println("aaa\nbbb")
	 //\b 是退格
	 fmt.Println("aaa\bbbb")
	 //\r 光标回到本行的开头,后续输入就会替换原有的字符
	 fmt.Println("aaaa\rbbb")
	 //\t 制表符
	 fmt.Println("aaaaaaaaa")
	 fmt.Println("aaaaa\tbbb")
	 fmt.Println("aaaa\tbbb")
	 //\ ""双引号
	 fmt.Println("\"Golang")
	 fmt.Println("\"Golang\"")
}

在这里插入图片描述

2.2.5 布尔类型

【1】布尔类型也叫bool类型,bool类型数据只允许取值true和false
【2】布尔类型占1个字节。
【3】布尔类型适于逻辑运算,一般用于程序流程控制
【4】代码:

package main
import "fmt"

func main(){
     //测试布尔类型的数值:
	 var flag01 bool = true
	 fmt.Println(flag01)

	 var flag02 bool = false
	 fmt.Println(flag02)

	 var flag03 bool = 5 < 9
	 fmt.Println(flag03)
}

在这里插入图片描述

2.2.6 字符串类型

【1】介绍:
字符串就是一串固定长度的字符连接起来的字符序列。

【2】字符串的使用:

【3】代码:

package main
import "fmt"

func main(){
    //1.定义一个字符串:
	var s1 string = "你好,Golang"
	fmt.Println(s1)
	//2.字符串是不可变的:指的是字符串一旦定义好,其中的字符的值不能改变
	var s2 string = "abc"
	//s2 = "qqq"
	//s2[0] = 't'
	fmt.Println(s2)
	//3.字符串的表示形式:
	//(1)如果字符串中没有特殊字符,字符串的表示形式用双引号
	var s3 string = "adaasdfasdva"
	fmt.Println(s3)
	//(2)如果字符串中有特殊字符,字符串的表示形式用反引号``
	var s4 string = `
	package main
	import "fmt"

	func main(){
		//测试布尔类型的数值:
		var flag01 bool = true
		fmt.Println(flag01)

		var flag02 bool = false
		fmt.Println(flag02)

		var flag03 bool = 5 < 9
		fmt.Println(flag03)
	}
	`
	fmt.Println(s4)
	//4.字符串的拼接作用,使用+号
	var s5 string = "1234" + "qwer"
	s5 += "zzzz"
	fmt.Println(s5)
	//5.当一个字符串过长的时候 注意:+保留在上一行的最后
	var s6 string = "1234" + "qwer" + "1234" + "qwer" + "1234" + "qwer" + 
	"1234" + "qwer" + "1234" + "qwer" + "1234" + "qwer" + "1234" + "qwer" + 
	"1234" + "qwer" + "1234" + "qwer" + "1234" + "qwer" + "1234" + "qwer" + 
	"1234" + "qwer" + "1234" + "qwer" + "1234" + "qwer"
	fmt.Println(s6)
}

在这里插入图片描述

2.2.7 基本数据类型的默认值

【1】在Golang中数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值(默认值又叫零值)。

在这里插入图片描述

【2】代码验证:

package main
import "fmt"

func main(){
    var a int
	var b float32
	var c float64
	var d bool
	var e string
	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
	fmt.Println(d)
	fmt.Println(e)
}

在这里插入图片描述

2.2.8 基本数据类型之间的转换

【1】Go在不同类型的变量之间赋值时需要显式转换,并且只有显式转换(强制转换)。
【2】语法:
表达式T(v)将值v转换为类型T
T : 就是数据类型
v : 就是需要转换的变量

【3】案例展示:

package main
import "fmt"

func main(){
     //进行类型转换
	 var n1 int = 100
	 //var n2 float32 = n1  在这里自动转换不好使,必须显式转换
	 fmt.Println(n1)
	 //fmt.Println(n2)
	 var n2 float32 = float32(n1)
	 fmt.Println(n2)
	 //注意:n1的类型其实还是int类型,只是将n1的值100转为了float32而已,n1还是int的类型
	 fmt.Printf("%T",n1) //int
     fmt.Println()       //换行

	 var n3 int64 = 888888
	 var n4 int8 = int8(n3)
	 fmt.Println(n3)
	 fmt.Println(n4)  //56
     
	 var n5 int32 = 12
	 var n6 int64 = int64(n5) + 30
	 fmt.Println(n5)
	 fmt.Println(n6)

	 var n7 int64 = 12
	 var n8 int8 = int8(n7) + 127 //编译通过,但是结果可能会溢出
	 //var n9 int8 = int8(n8) + 128 //编译不会通过
	 fmt.Println(n8)
	 //fmt.Println(n9)
}

在这里插入图片描述

2.2.9 基本数据类型转为string

【1】基本数据类型和string的转换介绍
在程序开发中,我们经常需要将基本数据类型转成string类型。或者将string类型转成基本数据类型。
【2】基本类型转string类型
方式1:fmt.Sprintf("%参数",表达式) —》 重点练习这个,推荐方式
方式2:使用strconv包的函数

【3】代码测试:

方式一:fmt.Sprintf("%参数",表达式) —》 重点练习这个,推荐方式

https://studygolang.com/pkgdoc

在这里插入图片描述

https://studygolang.com/static/pkgdoc/pkg/fmt.htm#Sprintf

在这里插入图片描述

代码:

package main
import "fmt"

func main(){
    var n1 int = 19
    var n2 float32 = 4.78
	var n3 bool = false
	var n4 byte = 'a'

	var s1 string = fmt.Sprintf("%d",n1)
	fmt.Printf("s1对应的类型是:%T ,s1 = %q \n",s1,s1)

	var s2 string = fmt.Sprintf("%f",n2)
	fmt.Printf("s2对应的类型是:%T ,s2 = %q \n",s2,s2)

	var s3 string = fmt.Sprintf("%t",n3)
	fmt.Printf("s3对应的类型是:%T ,s3 = %q \n",s3,s3)

	var s4 string = fmt.Sprintf("%c",n4)
	fmt.Printf("s4对应的类型是:%T ,s4 = %q \n",s4,s4)
}

在这里插入图片描述

方式2使用strconv包的函数

在这里插入图片描述

代码

package main
import(
    "fmt"
    "strconv"
)

func main(){
    var n1 int = 18
	var s1 string = strconv.FormatInt(int64(n1),10) //参数:第一个参数必须转为int64类型,第二个参数指定字面值的进制形式为十进制
	fmt.Printf("s1对应的类型是:%T , s1 = %q \n",s1, s1)

	var n2 float64 = 4.29
	var s2 string = strconv.FormatFloat(n2,'f',9,64)
	//第二个参数:'f'(-ddd.dddd)  第三个参数:9  保留小数点后面9位  第四个参数:表示这个小数是float64类型
	fmt.Printf("s2对应的类型是:%T , s2 = %q \n",s2, s2)

	var n3 bool = true
	var s3 string = strconv.FormatBool(n3)
	fmt.Printf("s3对应的类型是:%T , s3 = %q \n",s3, s3)
}

在这里插入图片描述

2.3.0 string类型转为基本数据类型

【1】string类型转基本类型
方式:使用strconv包的函数
在这里插入图片描述

【2】测试

在这里插入图片描述
在这里插入图片描述

代码:

package main
import(
    "fmt"
    "strconv"
)

func main(){
    //string---->bool
	var s1 string = "true"
	var b bool
    //ParseBool这个函数的返回值有两个:(value bool,err error)
	//value就是我们得到的布尔类型的数据,err出现的错误
	//我们只关注得到的布尔类型的数据,err可以用_直接忽略
	b , _ = strconv.ParseBool(s1)
	fmt.Printf("b的类型是:%T,b=%v \n",b,b)

	//string---->int64
	var s2 string = "19"
	var num1 int64
	num1,_ = strconv.ParseInt(s2,10,64)
	fmt.Printf("num1的类型是:%T,num1=%v \n",num1,num1)

	//string----->float32/float64
	var s3 string = "3.14"
	var f1 float64
	f1,_ = strconv.ParseFloat(s3,64)
	fmt.Printf("f1的类型是:%T,f1=%v \n",f1,f1)

	//注意:string向基本数据类型转换的时候,一定要确保string类型能够转成有效的数据类型,否则最后得到的结果就是按照对应类型的默认值输出
	var s4 string = "golang"
	var b1 bool
	b1 , _ = strconv.ParseBool(s4)
	fmt.Printf("b1的类型是:%T,b1=%v \n",b1,b1)

	var s5 string = "golang"
	var num2 int64
	num2,_ = strconv.ParseInt(s5,10,64)
	fmt.Printf("num2的类型是:%T,num2=%v \n",num2,num2)
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值