#### Go 变量及基本数据类型(二)今天学习一下基本数据类型,包括整数类型,小数类型,字符类型##### 整数类型用来存放整数数值的, 如0,1,-10,2222等; 整数型的类型有:
类型 |
有无符号 |
占用存储空间 |
表数范围 |
int8 |
有 |
1字节 |
-128~127 |
int16 |
有 |
2字节 |
-2^15~2^15-1 |
int32 |
有 |
4字节 |
-2^31~2^31-1 |
int64 |
有 |
8字节 |
-2^63~2^63-1 |
案例:
package main import ( "fmt" "unsafe" ) func main(){ // 整数类型有符号(默认情况下int 类型根据系统平台有关,32 位系统int= int32 // 64 位系统int = int64 var i int = 1 var i1 int8 = 127 fmt.Println(i,i1) fmt.Println(unsafe.Sizeof(i)) //8 变量占用的内存大小单位字节 fmt.Println(unsafe.Sizeof(i1)) //1 变量占用的内存大小单位字节 }
整数类型的无符号类型
类型 |
有无符号 | 占用储存空间 | 表数范围 |
uint8 |
无 |
1字节 |
0~255 |
uint16 |
无 |
2字节 |
0~2^16-1 |
uint32 |
无 |
4字节 |
0~2^32-1 |
uint64 |
无 |
8字节 |
0~2^64-1 |
案例:
package main import ( "fmt" "unsafe" ) func main(){ //整数类型无称号(默认情况下uint类型跟系统平台有关,32 位系统uint = uint32 // 64 位系统 uint = uint64 var i uint = 266 var i1 uint16 = 100 fmt.Println(i,i1) fmt.Println(unsafe.Sizeof(i)) // 8 fmt.Println(unsafe.Sizeof(i1)) // 2 }
整数类型的其它类型
类型 |
有无符号 |
占用存储空间 |
表数范围 |
int |
有 |
32位系统4字节,64位系统8字节 |
-2^31~2^31-1,-2^63~-2^63-1 |
uint |
无 |
32位系统4字节,64位系统8字节 |
0~2^32-1,0~2^64-1 |
rune |
有 |
4字节 |
-2^31~2^31-1,表示一个unicode 码 |
byte |
无 |
1字节 |
0~255 存储字符时使用byte |
package main import "fmt" func main(){ var i int = 1000 // 无符号,内存大小跟系统平台有关 var i1 uint = 1 // 有符号内存大小跟系统平台有关 var i2 byte = 255 // 字节类型, 内存大小为1字节 fmt.Println(i,i1,i2) }
整型的使用细节 1. int uint 的内存大小与系统有关; 2. Go 整型默认声明为 int 类型3. 在保证程序正确运行的情况下,尽量使用占用空间小的数据类型
package main import "fmt" func main(){ // 默认类型为int var n = 100 // 格式化输出 fmt.Printf("n1 的类型为 %T \n,n) // %T 为类型 // 使用占用空间小的数据类型 var age byte = 21 fmt.Println(age) }
##### 小数类型小数类型是用来存储小数的,如: 1.1,2.2,3.1414;
类型 |
占用存储空间 |
表数范围 |
单精度float32 |
4字节 |
-3.403E38~3.403E38 |
双精度float64 |
8字节 |
-1.798E308~1.798E308 |
package main import "fmt" func main(){ var a float32 = 12.3 var a1 float32 = -0.01 var a2 float64 = -0.02 fmt.Println(a,a1,a2) var a3 float32 = 1.00000088 var a4 float32 = 1231.1111111 var a5 float32 = 11231.1111111 fmt.Println(a3) //1.0000008,尾数部分丢失, 精度损失 fmt.Println(a4) //1231.1111,尾数部分丢失, 精度损失 fmt.Println(a5) //11231.111,尾数部分丢失, 精度损失 }
小数型使用细节1. Go 浮点类型有固定的范围和字段长度,不受具体的系统影响;2. Go 默认浮点类型为float64; 3. 开发中推荐使用float64; 4. 浮点类型常量两种表示方式; 4.1 十进制数形式: 0.1415926 可以写为: .1415926(***必须有小数点***); 4.2 科学计数法: 0.14e2 表示 0.14 *10 的2次方 = 14; 4.3 科学计数法: 0.14e-2 表示 0.14 / 10的2次方 = 0.0014;##### 字符类型Go 中没有专门的字符类型,如要存储单个字符(字母) ,一般使用byte 保存; 字符串就是一串固定长度的字符连接起来的字符序列,Go 的字符串由单个字节连接一起的,传统的字符串由字符组成,而Go 的字符串由字节组成 ;
package main import "fmt" func main(){ // 字节使用单引号表示 var c byte = 'a' fmt.Println(c) // 直接打印byte 值,输出的是该字节对应的unicode码值 // 输出对应的字符需要格式化 fmt.Printf("%c\n",c) // overflow 溢出 //var c1 byte = '您' var c1 int = '您' fmt.Printf("c1=%c c1 对应的码值为%d\n",c1,c1) }
字符类型使用细节 1. 如果保存的是ASCII 表的字符[0-9,a-z,A-Z],可以直接使用byte; 2. 如果保存的字符对应的码值大于255(byte 表示最大数为255=int8),可以考虑表示范围大的类型; 3. 如果想输出字符,需要格式化输出fmt.Printf("%c",c); 4. 字符常量是用单引号表示的单个字符; 5. Go 中允许使用转义字符'\'将其后的字符转变成特殊字符类型: 如: var c byte = '\n' 表示一个换行符; 6. Go 使用UTF-8 编码: 一个英文字母为1字节,一个汉字为3字节; 7. 字符类型可以参与运算: 相当于一个整数
package main import "fmt" func main(){ var a byte = 'a' fmt.Println(10+a) // 107 = 10 + 97 }
--------------最近在同步更新微信公众号: "开胃咸菜", 大家可以关注交流