运算符的优先级

1
2
3
4
5
6
Precedence    Operator
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||

^ 和 &^ 的区别

^ 指的是按位异或(两个操作数),二进制取反(一个操作数)
&^指的是后面操作数转二进制每一位取反后与前面操作数做按位与运算

例如,假设我们有两个数字 5 和 3:
5 的二进制表示为 101
3 的二进制表示为 011
5 ^ 3 = 110 = 6
5 &^ 3 = 101 & 100 = 100 = 4

提示

Go 语言中没有自增与自减运算符,它们被降级为了语句 statement,并且规定了只能位于操作数的后方,所以不用再去纠结 i++和++i 这样的问题。

1
2
3
a++ // 正确
++a // 错误
a-- // 正确
还有一点就是,它们不再具有返回值,因此 a = b++这类语句的写法是错误的,会报错:expected ;, found ++