第 4 章 运算符
4.1 运算符的基本介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
-
- 算术运算符
-
- 赋值运算符
-
- 比较运算符/关系运算符
-
- 逻辑运算符
-
- 位运算符
-
- 其它运算
4.2 算术运算符
算术运算符是对数值类型的变量进行运算的,比如:加减乘除。在 Go 程序中使用的非常多
4.2.1算术运算符的一览
4.2.2案例演示
案例演示算术运算符的使用。
+, - , * , / , %, ++, – , 重点讲解 /、%
自增:++
自减:–
演示 % 的使用特点
// 演示 % 的使用
// 看一个公式 a % b = a - a / b * b
fmt.Println("10%3=", 10 % 3) // =1
fmt.Println("-10%3=", -10 % 3) // = -10 - (-10) / 3 * 3 = -10 - (-9) = -1
fmt.Println("10%-3=", 10 % -3) // =1
fmt.Println("-10%-3=", -10 % -3) // =-1
4.2.3算术运算符使用的注意事项
- 对于除号 “/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃
小数部分。 例如: x := 19/5 ,结果是 3 - 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。
- Golang 的自增自减只能当做一个独立语言使用时,不能这样使用
4)Golang的++ 和 – 只能写在变量的后面,不能写在变量的前面,即:只有a++ a-- 没有 ++a --a
5) Golang的设计者去掉c/java中的自增自减的容易混淆的写法,让Golang更加简洁,统一(强制性的)
4.2.4课堂练习1
4.2.5课堂练习2
- 假如还有 97 天放假,问:xx 个星期零 xx 天
- 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏
温度对应的摄氏温度。
package main
import "fmt"
func main() {
days := 97
week := days / 7
day := days % 7
fmt.Printf("%d个星期%d天\n", week, day)
var huashi float64 = 134.2
var sheshi float64 = 5.0 / 9 * (huashi - 100)
fmt.Printf("华氏度:%f转换为摄氏度:%f\n", huashi, sheshi)
}
4.3 关系运算符(比较运算符)
4.3.1基本介绍
- 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false
- 关系表达式 经常用在 if 结构的条件中或循环结构的条件中
4.3.2关系运算符一览图
4.3.3案例演示
4.3.4关系运算符的细节说明
细节说明
- 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false。
- 关系运算符组成的表达式,我们称为关系表达式: a > b
- 比较运算符"=="不能误写成 “=” !!
4.4 逻辑运算符
4.4.1基本介绍
用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool值
4.4.2逻辑运算的说明
4.4.4注意事项和细节说明
1) &&也叫短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false
2) ||也叫短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true
- 案例演示
4.5 赋值运算符
4.5.1基本的介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
4.5.2赋值运算符的分类
4.5.3赋值运算的案例演示
案例演示赋值运算符的基本使用。
- 赋值基本案例
- 有两个变量,a 和 b,要求将其进行交换,最终打印结果
- += 的使用案例
- 案例
4.5.4赋值运算符的特点
-
运算顺序从右往左
-
赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
-
复合赋值运算符等价于下面的效果
比如:a += 3 等价于 a = a + 3
4.5.5面试题
有两个变量,a和 b,要求将其进行交换,但是不允许使用中间变量,最终打印结果
4.6 位运算符
其它运算符
4.7.1课堂案例
案例 1:求两个数的最大值
案例 2:求三个数的最大值
4.8 特别说明
举例说明,如果在 golang中实现三元运算的效果。
4.9 运算符的优先级
4.9.1运算符的优先级的一览表
4.9.2对上图的说明
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
- 只有单目运算符、赋值运算符是从右向左运算的。
- 梳理了一个大概的优先级
- 1:括号,++, –
- 2: 单目运算
- 3:算术运算符
- 4:移位运算
- 5:关系运算符
- 6:位运算符
- 7:逻辑运算符
- 8:赋值运算符
- 9:逗号
4.10键盘输入语句
4.10.1 介绍
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.go
4.10.2 步骤
1) 导入fmt包
2) 调用fmt包中的fmt.Scanln()或者fmt.Scanf()
4.10.3 案例演示:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水, 是否通过考试 】。
- 使用 fmt.Scanln() 获取
- 使用fmt.Scanf()获取
4.11 进制
对于整数,有四种表示方式:
- 二进制:0,1 ,满 2 进 1。
在 golang中,不能直接使用二进制来表示一个整数,它沿用了 c的特点。 - 十进制:0-9 ,满 10 进 1。
- 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
- 十六进制:0-9 及 A-F,满 16 进 1. 以 0x 或 0X 开头表示。
此处的 A-F 不区分大小写。
4.11.1 进制的图示
4.11.2 进制转换的介绍
4.11.3其它进制转十进制
4.11.4二进制如何转十进制
4.11.5八进制如何转十进制
4.11.616进制转成10进制
4.11.7其它进制转10进制的课堂练习
4.11.8十进制如何转成其它进制
4.11.9十进制如何转二进制
4.11.10十进制转成八进制
4.11.11十进制转十六进制
4.11.13二进制转换成八进制、十六进制
4.11.16八进制、十六进制转成二进制
4.12位运算
4.12.1位运算的思考题
1)请看下面的代码段,回答a,b,c,d结果是多少?
func main(){
var a int = 1 >>2
var b int =-1 >>2
var c int = 1 <<2
var d int =-1 <<2
//a,b,c,d结果是多少
fmt.Println("a=",a)
fmt.Println("b=",b)
fmt.Println("c=",c)
fmt.Println("d=",d)
fmt.Println(2&3)
fmt.Println(2|3)
fmt.Println(13&7)
fmt.Println(5|4)
fmt.Println(-3^3)
}
4.12.2 二进制在运算中的说明
二进制是逢 2 进位的进位制,0、1 是基本算符。
现代的电子计算机技术全部采用的是二进制,因为它只使用 0、1 两个数字符号,非常简单方便,
易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用 0 和 1 两个数字及其组合来表示任何数。进位规则是“逢 2 进 1”,数字 1 在不同的位上代表不同的值, 按从右至左的次序,这个值以二倍递增。
在计算机的内部,运行各种运算时,都是以二进制的方式来运行。
4.12.3原码、反码、补码
在计算机运算的时候,都是以补码的方式来运算的
4.12.4位运算符和移位运算符