运算符是程序中用于计算的符号。
算术运算符
算术运算符主要用于数学计算。
+
、-
、*
、/
、%
分别表示加、减、乘、除、及取余数。
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 | || |