go语言学习 - 运算符

golang

算术运算符

二元运算符

字面形式 名称 解释
+ 加法 两个运算数的类型必须相同并且为基本数值类型
- 减法 两个运算数的类型必须相同并且为基本数值类型
* 乘法 两个运算数的类型必须相同并且为基本数值类型
/ 除法 两个运算数的类型必须相同并且为基本数值类型
% 取余 两个运算数的类型必须相同并且为基本整数数值类型

位运算符

字面形式 名称
& 位与
^ 异或
&^ 清位
<< 左移位
>> 右移位

一元运算符

字面形式 名称 解释
+ 取正数 +n等价于0 + n
- 取负数 -n等价于0 - n
^ 位反

op=运算符

1
2
3
4
5
6
7
8
9
10
11
var a, b int8 = 3, 5
a += b
println(a) // 8
a *= a
println(a) // 64
a /= b
println(a) // 12
a %= b
println(a) // 2
b <<= uint(a)
println(b) // 20

自增/自减运算符

go语言自增和自减运算符没有返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

func main() {
a, b, c := 12, 1.2, 1+2i
a++ // ok. <=> a += 1 <=> a = a + 1
b-- // ok. <=> b -= 1 <=> b = b - 1
c++ // ok.

// 下面这些行编译不通过。
/*
_ = a++
_ = b--
_ = c++
++a
--b
++c
*/
}

字符串连接运算符

字面形式 名称
+ 字符串衔接
+= 字符串衔接
1
2
3
4
println("Go" + "lang") // Golang
var a = "Go"
a += "lang"
println(a) // Golang

布尔运算符

参与运算值必须是布尔类型

字面形式 名称
&&
||
!
1
2
3
4
5
// x    y       x && y   x || y   !x      !y
true true true true false false
true false false true false true
false true false true true false
false false false false true true

比较运算符

字面形式 名称
== 等于
!= 不等于
< 小于
<= 小于或等于
> 大于
>= 大于或等于

运算符优先级

同一行中的操作符的优先级是一样的。优先级逐行递减。

1
2
3
4
5
*   /   %   <<  >>  &   &^
+ - | ^
== != < <= > >=
&&
||
1
2
3
4
5
// 优先级一样,从左到右计算
12 / 2 * 3

// 先计算4*4,再计算12+16
12 + 4 * 4