Go语言学习教程(三)
一、整型概述
* 在Go语言中可以进行数学运算的类型分为整型和浮点型
* 所有的整数数字存储到整型中就可以进行数学运算
* 整型和整型运算的结果还是整型.(5/2=2)
* 都是整型,但是int8和int16之间不可以进行运算,必须进行类型转换
* 整型分为有符号整型和无符号整型
* 有符号整型有正数和负数.其二进制最高位表示符号,0为正数1为负数.int和intx为有符号整型
* 无符号整型只能取大于等于0的整数.其二进制最高位表示真实数字.unit和unitx为无符号整型
* 整型取值范围和作用
类型取值范围
int8[-128 , 127]
int16[-32768 , 32767]
int32[-2147483648 , 2147483647] Go语言中没有字符类型,所有字符都使用int32存储
int64[-9223372036854775808 , 9223372036854775807]
int受限于计算机系统,系统是多少位,int为多少位
uint8[0 , 255]
uint16[0 , 65535]
uint32[0 , 4294967295]
uint64[0 , 18446744073709551615]
uint受限于计算机系统,系统是多少位,uint为多少位
rune与int32类似,常用在获取值的Unicode码
byte与uint8类似.强调值为原始数据.一个字节占用8个二进制
uintptr大小不确定,类型取决于底层编程
二、类型转换
* Go语言是静态类型语言,并且不具备低精度向高精度自动转换功能,所以不同类型变量之间相互赋值需要进行类型转换.
func main() {
//声明3个类型变量
var a int = 1
var b int32 = 2
var c int64 = 3
fmt.Println(a, b, c)
//把int32转换为int
a = int(b)
fmt.Println(a, b)
a = 1
//把int64转换成int32
b = int32(c)
fmt.Println(b, c)
b = 2
//把int转换为int64
c = int64(a)
fmt.Println(a, c)
c = 3
}
三、不同进制整数
func main() {
//默认表示十进制
d := 17
//0开头表示八进制
o := 021
//0x开头表示十六进制
x := 0x11
//e2表示10的2次方
e := 11e2
//输出
fmt.Println(d, o, x, e)
//把变量d中内容转换为二进制
b := fmt.Sprintf("%b", d)
fmt.Println(b)
}
四、字符型概述
* 字符型存放单个字母或单个文字
* Go语言不支持字符类型,在Go语言中所有字符值都转换为对应的编码表中int32值
* Go语言默认使用UTF-8编码
五、编码发展历史
* 最开始使用8个可开合晶体管表示世界万物,这就是字节的由来.后来生产出可以控制字节的机器,出现了计算机
* 把字节中32以下情况称为控制码,后在控制码基础上添加空格、标点符号、数字、大小写字母等直到127,最终形成了ANSI的ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码),这时已经较好的支持英文了
* 随着计算机在全球的应用,在原ASCII基础上添加了新的字母、符号、横线竖线等直到255号,从128到255被称为扩展字符集但是此时计算机还是在只支持英文
* 等中国开始使用计算机,为了支持中文,保留了前127号,称这些为半角,把后面的内容以两个字节拼接形成中文汉字和表单符号,这后半部分就是全角,其中汉字6763个满足中文大部分情况的要求,称这个编码为GB2312
* 随着计算机在中国的普及,使用GB2312时有的汉字无法打出,又在GB2312基础上添加了近20000个汉字(包括繁体和符号等)形成GBK,后来为支持少数民族又在GBK基础上推出GB18080
* 全球中每个国家都有着自己的一套编码,ISO国际为了统一标准,重新定义一套编码,希望包含全球所有的文字和符号,俗称Unicode
* 随着互联网的快速发展,为解决Unicode网络传输中流浪浪费问题,出现了UTF编码,有UTF-8(8位传输)和UTF-16(16为传输)两种.其中UTF-8使用最多,为变长编码方式,中文占3个字节
六、浮点数概述
* 浮点类型用于存储带有小数点的数字
* 一个整数数值可以赋值给浮点类型但是一个整型变量不可以赋值给浮点类型
* 浮点数进行运算的结果是浮点数
* Go语言中浮点类型有两个
* float32
* float64
* float32和float64之间不可以相互运算,需要进行类型转换
* 建议使用float64,虽然占用空间多,但是float32在累计运算时可能出现误差
* 整型运算和浮点型运算结果类型为本身类型
七、布尔类型介绍
* 布尔类型关键字bool
* 布尔类型可取值只有两个
* true :代表真,表示成立,二进制表示时1表示真
* false:代表假,表示不成立,二进制表示时0表示假
* 布尔类型不能与其他类型相互转换
* 布尔类型占用1个byte
* 布尔类型单独使用较少,多用在判断中
* 布尔类型除了直接赋值true或false以外,还可以表达式赋值,借助比较运算符、逻辑运算符等
* 创建bool类型变量
func main() {
var a bool = true
var b bool = false
var c = true
d := false
fmt.Println(a, b, c, d)
e := 5 > 3
fmt.Println(e) //输出:true
}
八、运算符概述
* Go语言支持运算符,算数运算符、比较运算符、逻辑运算符、赋值运算符、关系运算符、位运算符等
* 不同的运算符使用场景不同,运算符一起使用时还需要注意优先级问题
九、算数运算符
* 算数运算符对浮点类型和整型进行数学运算
* 乘法、除法优先级高于取余,取余高于加法、减法
运算符含义
+加法
-减法
*乘法
/除法
%取余. 例如 12%5=2 8%4=0
++自增一,只能单独使用,没有返回值
--自减一,和++语法相同
十、比较运算符
* 比较运算符用于比较两个内容的大小,判断和分支中使用频率较高
运算符含义
==是否等于,返回值为bool类型,判断是否成立
!=不等于
>大于
>=大于等于
<小于
<=小于等于
十一、逻辑运算符
* 逻辑运算符在判断和分支中使用频率较高
运算符含义
!逻辑非,取结果的反
&&逻辑与,只有两侧同时为真时总体结果为真
||逻辑或,两侧只要有一个为真时整体为真
十二、赋值运算符
* 赋值运算符目的给变量赋值
* 提供了很多运算的简单方式
运算符含义
=右侧内容赋值给左侧变量.例如:A=B 把B赋值给A
+=A+=B 相当于 A=A+B
-=A-=B 相当于 A=A-B
*=A *= B相当于 A等于A乘以B
/=A/=B 相当于A=A/B
%=A%=B 相当于 A=A%B
<<=A<<=B 相当于 A=A<<B
>>=A>>=B 相当于 A=A>>B
&=A&=B 相当于 A=A&B
|=A|=B 相当于 A=A|B
^=A^=B 相当于 A=A^B