GO语言中常见的运算符有算术运算符,赋值运算符,关系运算符,逻辑运算符等。
一 算术运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
+ | 加 | 1+2 | 3 |
- | 减 | 8-2 | 6 |
* | 乘 | 3*3 | 9 |
/ | 除 | 12/3 | |
% | 取模(取余) | 10%3 | 1 |
++ | 后自增,没有前自增 | a=0; a++ | a=1 |
-- | 后自减,没有前自减 | a=2; a-- | a=1 |
注意:GO语言中没有前自增,没有前自减,这是与其它编程语言不同的地方。
1.1 类型转换
遇到小数时的处理方式
func main() {
var chinese int =90
var math int =80
var english int =69
//求平均数(结果不带小数)
fmt.Printf("平均数是:%d\n",(chinese+math+english)/3)
//求平均数(结果带小数)
fmt.Printf("平均数是(带小数):%f",float64(chinese+math+english)/3)
}
结果
测试一:下边的代码会报错吗?
func main() {
var num1 int = 90
var num2 int = 81
var num3 float64
num3 = (num1 + num2) / 2
fmt.Printf("平均数是:%f",num3)
}
报错如下
改为这样的即可
func main() {
var num1 int = 90
var num2 int = 81
var num3 float64
num3 = float64(num1 + num2) / 2
fmt.Printf("平均数是:%f",num3)
}
测试二:下边的代码会报错吗?
func main() {
var num1 int = 10
var num2 int = 3
var mod float64
mod = float64(num1/num2)
fmt.Printf("余数是:%f",mod)
}
不会报错,结果如下
测试三:下边的代码会报错吗?
func main() {
var num1 int = 35
var num2 int = 40
var num3 int = 2
var avg float64
avg = float64(num1+num2)/num3
fmt.Printf("余数是:%f",avg)
}
报错如下:
改为下边这样即可
func main() {
var num1 int = 35
var num2 int = 40
var num3 int = 2
var avg float64
avg =float64((float64(num1+num2))/float64(num3))
fmt.Printf("结果是:%f",avg)
}
运行结果
强制类型转换,数据类型一定要相兼容
下边的写法对吗?
func main() {
var a string
var b int
a="3.14"
b=int(a)
fmt.Printf("b=%d",b)
}
报错:
谨记:int 转float强制转换,多小数
float转int强制转换,丢精度.
注意:+运算符除了可以做加法,还可以像java一样连接字符串
func main() {
var a string = "abc"
var b string = "ghj"
fmt.Printf("%s", a+b)
}
结果:
二 赋值运算符
关于赋值运算符前面我们已经使用过多次,赋值运算符 = ,
var int 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 |
三 关系运算符
关系运算符我们又称为比较运算符,听到比较这个词,大家想到的就是比较大小,例如:
大象的重量(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 |
func main() {
var b bool
b = 1500 > 1
fmt.Printf("%t\n", b)
b = 3 > 100
fmt.Printf("%t\n", b)
b = 20 == 20
fmt.Printf("%t\n",b)
}
结果
四 逻辑运算符
4.1 常见的逻辑运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
&& | 与 | a&&b | 如果a和b都为真,则结果为真,否则为假。 |
|| | 或 | a||b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
五 其他运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
& | 取地址运算符 | &a | 变量a的地址 |
* | 取值运算符 | *a | 指针变量a所指向内存的值 |
六 运算符优先级
上面我们已经将运算符介绍完了,下面说一下它们的运算符优先级
在Go语言中,一元运算符(一些只需要一个操作数的运算符称为一元运算符(或单目运算符)。)拥有最高的优先级,二元运算符的运算方向均是从左至右。
下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
优先级 | 运算符 |
---|---|
7 | ^ ! |
6 | * / % << >>&&^ |
5 | + - | ^ |
4 | == != < <= >= > |
3 | <- |
2 | && |
1 | || |
注意:逻辑与的优先级要高于逻辑或。