在前面的课程中,我们已经学习了变量,常量,那么接下来我们学习一下运算符。GO语言中常见的运算符有算术运算符,赋值运算符,关系运算符,逻辑运算符等。
1:算术运算符
(1)
| ** | ** | ** | ** |
|---|---|---|---|
| + | 加 | 10 |
- 5 | 15 | | - | 减 | 10 - 5 | 5 | | | 乘 | 10 5 | 50 | | / | 除 | 10 / 5 | 2 | | % | 取模(取余) | 10 % 3 | 1 | | ++ | 后自增,没有前自增 | a=0; a++ | a=1 | | — | 后自减,没有前自减 | a=2; a— | a=1 |
算术表达式:由算术运算符连接起来的式子.如:1+1
a-b(变量ab前面已声明并赋初值)
下面以a=10 ,b=20为例进行计算
package mainimport "fmt"func main() {var a int = 10var b int = 20//求和fmt.Printf("a+b=%d\n", a+b)//求积fmt.Printf("a*b=%d\n", a*b)//等等等等 + - * /}
自增与自减操作
package mainimport "fmt"func main() {var a int = 10var b int = 12a++b--fmt.Printf("a = %d, b = %d", a, b)}
a++等价于a=a+1
注意:GO语言中没有前自增,这是与其它编程语言不同的地方。
(2)演示:某学生三门课成绩为,语文:90 数学:80 英语:67,编程求总分和平均分。

虽然已经计算出总分与平均分了,但是我们可以对上面的程序进行优化,怎么优化呢?示例如下:

以上程序大家需要注意几点:
(2.1)该程序比第一种实现减少了变量的定义,可以减少对内存的占用,所以变量不是定义越多越好。
(2.2)注意运算优先级:先乘除,后加减,有括号先算括号里的,相同级别的从左至右运算 int a=((1+5)+3)*2
(2.3)小括号可以无限制的套用,但一定要成对出现
(3)类型转换:
现在我们把上面提的需求修改一下:语文:90 数学:80 英语:69,编程求总分和平均分.
只是将英语的成绩进行了修改,还是计算总分和平均分
但是平均分的计算结果还是79分,为什么没有小数呢?
现在将程序进行如下修改:
Go语言中不允许隐式转换,所有类型转换必须显式声明(强制转换),而且转换只能发生在两种相互兼容的类型之间
(1)思考题:
(4.1)请阅读以下程序,如果该程序正确,请说出程序运行的结果,如果有错误,请说出错误原因,并指明怎样进 行修改?
(4.2)以下程序,如果正确请说出程序运行的结果,如果错误,请说出错误原因,并指明怎样进行修改?
(4.3)以下程序,如果正确请说出程序运行的结果,如果错误,请说出错误原因,并指明怎样进行修改?
(5)练习:
练习1:定义两个数分别为100和20,打印出两个数的和。
练习2:计算半径为5的圆的面积和周长并打印出来.(pi为3.14)面积:pirr; Perimeter(周长)
练习3:某商店T恤(T-shirt)的价格为35元/件,裤子(trousers)的价格为120元/条.小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?
打8.8折后呢?
注意:以上代码定义多个变量,主要目的是让大家理解类型转换
练习4:如上题中打完8.8折后出现小数,商店为了结算方便,只收用户整数部分的钱,如本应收用户303.6,现在只收用户303元,应该如何做?
(2)强制类型转换总结
强制类型转换的语法格式:
数据类型名(待转换的值)
例如:
强制类型转换,数据类型一定要相兼容下面的写法对吗?
谨记:int 转float强制转换,多小数
float转int强制转换,丢精度。
(3)补充:关于“+”运算符,除了可以完成两个数字相加以外,也可以链接两个字符串,如下:
(4)作业:
(6.1)编程实现计算几天(如46天)是几周零几 天.
(6.2)编程实现107653秒是几天几小时几分钟几秒?
2:赋值运算符
关于赋值运算符前面我们已经使用过多次,赋值运算符 = ,
varint
num=9;num=num+1; 这里的=号是赋值运算符,不是数学义意上的相等.
常见的赋值运算符如下,前面我们使用的=是普通赋值,+=,-=等我们称为“复合赋值运算符”
| ** | 说明 | ** |
|---|---|---|
| = | 普通赋值 | c = a + b 将 a + b 表达式结果赋值给 c |
| += | 相加后再赋值 | c += a 等价于 c = c + a |
| -= | 相减后再赋值 | c -= a 等价于 c = c - a |
| *= | 相乘后再赋值 | c = a 等价于 c = c a |
| /= | 相除后再赋值 | c |
/= a 等价于 c = c / a | | %= | 求余后再赋值 | c %= a 等价于 c = c % a |
3:关系运算符
关系运算符我们又称为比较运算符,听到比较这个词,大家想到的就是比较大小,例如:
大象的重量(1500)>老鼠的重量(1)
兔子的寿命(3)>乌龟的寿命(1000)
我的年龄(20)==你的年龄(20)
提问:比大比小的结果是什么?
结果是对或者是错,在GO语言中,怎样表示对于错呢?
关系运算的结果是布尔类型的。
bool值只有两个
真:true
假:false
GO语言中常见的关系运算符如下:
| ** | ** | ** | ** |
|---|---|---|---|
| == | 相等于 | 4 == |
3 | false | | != | 不等于 | 4 != 3 | true | | < | 小于 | 4 < 3 | false | | > | 大于 | 4
3 | true | | <= | 小于等于 | 4 <= 3 | false | | >= | 大于等于 | 4 = 1 | true |
由以上关系运算符链接的表达式我们称为关系表达式。
关系运算符具体使用方式如下:
4:逻辑运算符
(1)常见的逻辑运算符如下:
| ** | ** | ** | ** |
|---|---|---|---|
| ! | 非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
| && | 与 | a |
&& b | 如果a和b都为真,则结果为真,否则为假。 | | || | 或 | a || b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
有逻辑运算符连接的表达式叫做逻辑表达式
通过以上表格我们发现:逻辑表达式的结果同样也是bool类型
逻辑运算符两边放的一般都是关系表达式或者bool类型的值。
例如:5>3 &&true3>5||false
(2)案例演示:
让用户输入老王的语文和数学成绩,输出以下判断是否正确,正确输出True,错误输出False
2.1) 老王的语文和数学成绩都大于90分
2.2) 语文和数学有一门是大于90分的
(3)
总结:
(3.1)逻辑与 &&
表达式1&&表达式2
| 表达式1 | 表达式2 | 表达式1&&表达式2 |
|---|---|---|
| True | True | True |
| False | True | False |
| True | False | False |
| False | False | false |
(3.2)逻辑或 ||
表达式1||表达式2
| 表达式1 | 表达式2 | 表达式1||表达式2 |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | false |
(3.3)逻辑非 !
!表达式
| 表达式 | !表达式 |
|---|---|
| True | False |
| False | true |
5:其他运算符
| ** | ** | ** | ** |
|---|---|---|---|
| & | 取地址运算符 | &a | 变量a的地址 |
| * | 取值运算符 | *a | 指针变量a所指向内存的值 |
关于指针的应用,我们后面会重点给大家讲解,目前大家只需要掌握&
6:运算符优先级
(1)上面我们已经将运算符介绍完了,下面说一下它们的运算符优先级。
在Go语言中,一元运算符(一些只需要一个操作数的运算符称为一元运算符(或单目运算符)。)拥有最高的优先级,二元运算符的运算方向均是从左至右。
下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
如下图所示:
| ** | ** |
|---|---|
| 7 | ^ ! |
| 6 | * / |
% << >>&&^ |
| 5 | + - |
^ |
| 4 | ==
!= < <= >=
| | 3 | <- | | 2 | && | | 1 | ||** |
上图中部分运算符现在没有讲解到,后期用到时再给大家具体讲解,目前大家需要掌握的是算术,赋值,关系,逻辑,取地址运算符。
(1)案例练习:
写下判断闰年的表达式,设待判断的年份变量为year.
闰年的判定(符合下面两个条件之一):
年份能够被400整除.(2000)
年份能够被4整除但不能被100整除.(2008)
让用户输入一个年份,如果是润年,则输出true,如果不是,则输出false.
2100/1600/1800/2009年是闰年吗?

注意:逻辑与的优先级要高于逻辑或。
