day02 go的数据类型和运算符
前言
- 动态语言类型
- 自动开辟数据空间,自动识别数据类型 python
- 静态语言类型
- 开辟内存空间,定义数据类型 c,java,go
go 语言中的数据类型
/*- go 基本数据类型:- 布尔类型- 数值类型- 整型 :- 有符号:int,int8,int16,int32,int64.- 无符号:uint,uint8,uint16,uint32,uint64- 浮点型- float32,float64- 复数:complex- 字符串类型- 派生数据类型- 指针 *- 数组 array- 结构体 struct- 通道 channel- 切片 slice- 函数 func- 接口 interface- Map
*/
code
// 1. 布尔类型var b1 boolvar b2 boolb1 = trueb2 = falsefmt.Println(b1, b2)// f fmt.Printf 格式化输出 : %d 整数, %s 字符串,%p 内存地址, %T 数据类型,%t布尔类型数据结果 ,%f 浮点数据fmt.Printf("布尔类型数据的整数结果:b1=%T,%t\n", b1, b1)fmt.Printf("布尔类型数据的整数结果:b2=%T,%t\n", b2, b2)// 布尔默认值 : false = 0 , true = 1var b3 boolfmt.Println(b3)// 2. 整数类型,不能超过该数据类型的长度var i1 int8i1 = 10fmt.Println(i1)//i1 = 1000 // 超出 int8 的范围。 cannot use 1000 (untyped int constant) as int8 value in assignment (overflows)fmt.Println(i1)//var i2 uint8//i2 = -100 // cannot use -100 (untyped int constant) as uint8 value in assignment (overflows)//fmt.Println(i2)// 3. 浮点型,默认保留 小数点后 六位var f1 float32f1 = -19999fmt.Printf("%T,%f\n", f1, f1)fmt.Println(f1)f1 = 3.14fmt.Printf("%T,%f\n", f1, f1)fmt.Println(f1)// 保留小数点后3位. 格式化输出:%.3f,超出的位数四舍五入var f2 float32f2 = 3.1415926fmt.Printf("%.3f\n", f2) // 3.142。自动四舍五入// float32 和 float64 精度不一样. 默认使用 float64var f3 float32 = -123.0000901var f4 float64 = -123.0000901fmt.Println(f3, f4) // -123.00009 -123.0000901// 4. 特殊数字类型 无符号// byte类型. byte == uint8var byte1 byte = 255fmt.Println(byte1)fmt.Printf("%T\n", byte1) // uint8 类型// rune类型 rune == int32var rune1 rune = 1000000000fmt.Println(rune1)fmt.Printf("%T\n", rune1) // int32 类型// int 默认根据系统位数来定义var int1 int = 1000fmt.Println(int1)fmt.Printf("%T\n", int1) // int 类型// 5. 字符串类型. go中字符串由字符组成。 go 默认使用utf-8编码类型var str0 stringstr0 = "Hello Word"fmt.Printf("%T %s \n", str0, str0) // string 类型var str1 stringstr1 = "go 语言学习中" // 空格隔开中文,英文不隔开fmt.Println(str1)// 单引号:字符 字符的本质是整形数值类型数据. 双引号:string类型s1 := 'A's2 := "A"fmt.Println(s1, s2) // 65, Afmt.Printf("%T,%T\n", s1, s2) // int32,string// 转义字符: \ 转义符号: \n 换行, \b 删除上一个字符,\t tabfmt.Println("hello\nword")fmt.Println("hello\bword")fmt.Println("hello\tword")// 反 转义字符fmt.Println("\\n")fmt.Println("\"")// 多行文本 使用 反引号 : ``s3 := `go 多行文本`fmt.Println(s3)// 6. 数值类型转换. 格式:新类型的值=新类型(旧类型的值).// int 转换为 floatvar v1 intv1 = 1v2 := float64(v1)fmt.Printf("%T,%d\n", v1, v1)fmt.Printf("%T,%.3f\n", v2, v2)// float 转换为 intc := 12d := float64(c)fmt.Printf("%T,%.3f\n", d, d)fmt.Printf("%T,%d\n", c, c)// 布尔类型 不支持转换
数值型
序号 |
类型和描述 |
1 |
uint8 无符号 8 位整型 (0 到 255) |
2 |
uint16 无符号 16 位整型 (0 到 65535) |
3 |
uint32 无符号 32 位整型 (0 到 4294967295) |
4 |
uint64 无符号 64 位整型 (0 到 18446744073709551615) |
5 |
int8 有符号 8 位整型 (-128 到 127) 0 |
6 |
int16 有符号 16 位整型 (-32768 到 32767) |
7 |
int32 有符号 32 位整型 (-2147483648 到 2147483647) |
8 |
int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
转义字符
![](https://img2024.cnblogs.com/blog/1613203/202407/1613203-20240701235338484-444633739.png)
运算符
/*运算符- 算数运算符- 取模 %- 加减乘除- ++ , -- 自增/自减- 赋值运算符- = 赋值运算符- += 加等于- -= 减等于- /= 处等于- *= 乘等于- 逻辑运算符- 与 &&, 或 || ,非 !- ! 取反运算符- 位运算符。 加密解密常用。 基于二进制数据计算- & 对比位置。相同位置位比较,两个为1就是1- | 对比位置。相同位置比较,一个为1就是1- >> 右移。- << 左移- ^ 相异或- &^ 位清空。 a &^ b。 为:0,取a上的数值。 为:1 ,取0(二进制)- 关系运算符- 大于>,小于<,等于==,不等于!=,大于等于>=,小于等于<= .- 其他运算符- & 取地址- * 指针符号*/
code
// 取模c := 7 % 2fmt.Println(c)// 取反b := truefmt.Println(!b)// 位运算// &aa := 1 //二进制001bb := 5 //二进制101fmt.Println(aa & bb) // 1// |fmt.Println(aa | bb) // 5// >> 右fmt.Println(bb >> 1) // 2. 101 右移动1位。 10 = 2fmt.Printf("%b\n", bb>>1)// << 左fmt.Println(bb << 1) // 10. 101 左移动1为。 1010 = 10fmt.Printf("%b\n", bb<<1)println()AA := 60 // 二进制:0011 1100BB := 13 // 二进制:0000 1101// & 0000 1100fmt.Println(AA & BB) // 12res1, _ := strconv.ParseInt("00001101", 2, 64)fmt.Println("二进制转十进制:", res1)// | 0011 1101fmt.Println(AA | BB) // 61res2, _ := strconv.ParseInt("00111101", 2, 64)fmt.Println("二进制转十进制:", res2)// ^ 按位异或. 位置相同为0,不同为1。 0011 0001fmt.Println(AA ^ BB) // 0011 0001res3, _ := strconv.ParseInt("00110001", 2, 64)fmt.Println("二进制转十进制:", res3)// &^ 位清空。 a &^ b。 为:0,取a上的数值; 为:1 ,取0(二进制)fmt.Println(AA &^ BB) // 0011 0000res4, _ := strconv.ParseInt("00110000", 2, 64)fmt.Println("二进制转十进制:", res4)// >> 左移 几位fmt.Println(AA << 2) // 二进制:0011 1100 ----> 1111 0000res5, _ := strconv.ParseInt("11110000", 2, 64)fmt.Println("二进制转十进制:", res5)// << 右移 几位fmt.Println(AA >> 2) // 二进制:0011 1100 ----> 0000 1111res6, _ := strconv.ParseInt("00001111", 2, 64)fmt.Println("二进制转十进制:", res6)
go 中的数据类型图
![](https://img2024.cnblogs.com/blog/1613203/202407/1613203-20240701235405629-156153736.png)