运算符是程序中用于计算的符号。

算术运算符

算术运算符主要用于数学计算。

+-*/%分别表示加、减、乘、除、及取余数。

var a int = 5
var b int = 3
var c int

c = a + b // c等于a+b的值,8
c = a - b // c等于a-b的值,2
c = a * b // c等于a乘b的值,15
c = a / b // c等于a除b的整数值1,整数除整数返回整数,浮点数除浮点数返回浮点数
c = a % b // c等于a除b的余数2,取余(模)运算

++--表示自增和自减语句符号。

var a int = 1
a++ // 自增运算,等同于 a = a + 1
a-- // 自减运算,等同于 a = a - 1

关系运算符

关系运算符,所谓关系就是大小关系,是用于比较两个值的大小。

==!=是用于比较两个值是否相等不相等,关系运算的结果为bool类型

var a int = 5
var b int = 3
a == b // 返回fasle,判断a是否等于b
a != b // 返回true,判断a是否不等于b

>>=<<=分别表示大于、大于等于、小于、小于等于。

var a int = 5
var b int = 3
a > b // true
a >= b // true
a < b // false
a <= b // false

逻辑运算符

逻辑运算符就是将多个语句连接成更复杂的逻辑语句。

&&||!分别表示且、或、非,逻辑运算的结果为bool类型。

var a bool = true
var b bool = false
var c bool
c = a && b  // false, 如果逻辑符号两边都是true,则返回true,否则为false。
c = a || b  // true , 如果逻辑符号两边只要有一个是true,则返回true,否则为false。
c = !a // false 取反,如果a为true,结果就是false,如果a为false,结果就是true。

位运算符

&|^分别是按位与、按位或、按位异或运算符。

var a = 0b00111100
var b = 0b00001101

// & 按位与,将两数的二进制位相与运算,只有一个为0,与的结果就是0,否则为1。
fmt.Printf("%b\n", a&b) // 0000 1100
// | 按位或,将两数的二进制位相或运算,只有一个为1,或的结果就是1,否则为0。
fmt.Printf("%b\n", a|b) // 0011 1101
// ^ 按位异或,将两数的二进制位异或运算,两数相应的二进制位值不同则为1,否则为0。
fmt.Printf("%b\n", a^b) // 0011 0001

<<>>分别是左移运算符、右移运算符。其功能就是将二进制数的各二进位全部左移或右移若干位。

// 左移运算符"<<",左移n位就是乘以2的n次方
// 右移运算符">>",右移n位就是除以2的n次方
var a = 0b00111100

fmt.Printf("%b\n", a<<2) // 11110000
fmt.Printf("%b\n", a>>2) // 00001111

赋值运算符

运算符 描述 用法
= 将一个值赋给一个变量或常量 c = a + b 将a+b的结果赋值给c
var a int = 5
var b int = 3
var c int = 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

先位运算后,再赋值:

运算符 描述 用法
<<= 左移后赋值 c <<= 2 等于 c = c << 2
>>= 右移后赋值 c >>= 2 等于 c = c >> 2
&= 按位与后赋值 c &= 2 等于 c = c & 2
^= 按位异或后赋值 c ^= 2 等于 c = c ^ 2
|= 按位或后赋值 c |= 2 等于 c = c | 2

其他运算符

运算符 描述 实例
& 返回变量存储地址 &a 将返回变量的存储地址
* 指针变量 *a 是一个指针变量

运算符优先级

这里的优先级和数学中的乘除法优先加减法一样,优先级高的先运算。

由上至下代表优先级由高到低:

优先级 运算符
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||