算术运算符
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| + | 加 | 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 |
关系运算符
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| == | 相等于 | 4 == 3 | false |
| != | 不等于 | 4 != 3 | true |
| < | 小于 | 4 < 3 | false |
| > | 大于 | 4 > 3 | true |
| <= | 小于等于 | 4 <= 3 | false |
| >= | 大于等于 | 4 >= 1 | true |
逻辑运算符
| 运算符 | 术语 | 示例 | 结果 | ||||
|---|---|---|---|---|---|---|---|
| ! | 非 | !a | 如果a为假,则!a为真;如果a为真,则!a为假。 | ||||
| && | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 | ||||
| \ | \ | 或 | a \ | \ | b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
位运算符
| 运算符 | 术语 | 说明 | 示例 | ||
|---|---|---|---|---|---|
| & | 按位与 | 参与运算的两数各对应的二进位相与 | 60 & 13 结果为12 | ||
| \ | 按位或 | 参与运算的两数各对应的二进位相或 | 60 \ | 13 结果为61 | |
| ^ | 异或 | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1 | 60 ^ 13 结果为240 | ||
| << | 左移 | 左移n位就是乘以2的n次方。 左边丢弃,右边补0。 | 4 << 2 结果为16 | ||
| >> | 右移 | 右移n位就是除以2的n次方。 右边丢弃,左边补位。 | 4 >> 2 结果为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 | |||
| <<= | 左移后赋值 | 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的地址 |
| * | 取值运算符 | *a | 指针变量a所指向内存的值 |
运算符优先级
在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。
下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
| 优先级 | 运算符 | ||
|---|---|---|---|
| 7 | ^ ! | ||
| 6 | *** / % <<>>& &^** | ||
| 5 | **+ - \ | ^** | |
| 4 | == != <<= >= > | ||
| 3 | <- | ||
| 2 | && | ||
| 1 | **\ | \ | ** |
当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。