3. 运算符

3.1 算术运算符

** 术语 示例 结果
+ 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

3.2 关系运算符

** 术语 示例 结果
== 相等于 4 == 3 false
!= 不等于 4 != 3 true
< 小于 4 < 3 false
> 大于 4 > 3 true
<= 小于等于 4 <= 3 false
>= 大于等于 4 >= 1 true

3.3 逻辑运算符

** 术语 示例 结果
! !a 如果a为假,则!a为真;
如果a为真,则!a为假。
&& a && b 如果a和b都为真,则结果为真,否则为假。
|| a || b 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

3.4 位运算符

** 术语 说明 示例
& 按位与 参与运算的两数各对应的二进位相与 60 & 13 结果为12
| 按位或 参与运算的两数各对应的二进位相或 60 | 13 结果为61
^ 异或 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1 60 ^ 13 结果为240
<< 左移 左移n位就是乘以2的n次方。 左边丢弃,右边补0。 4 << 2 结果为16
>> 右移 右移n位就是除以2的n次方。 右边丢弃,左边补位。 4 >> 2 结果为1

3.5 赋值运算符

** 说明 示例
= 普通赋值 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

3.6 其他运算符

** 术语 示例 说明
& 取地址运算符 &a 变量a的地址
* 取值运算符 *a 指针变量a所指向内存的值

3.7 运算符优先级

在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。

下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

** 运算符
7 ^ !
6 * / %

<< >> &
&^ | | 5 | + - |
^ | | 4 | == != <
<= >= > | | 3 | <- | | 2 | && | | 1 | ||** |