Google排名靠前的答案是错的!
写Go代码时一下子想不起准确的运算符优先级了,Google搜索了下,发现前面几个SEO做的比较好的网址给的要不就是错的,要不就是写的乱七八糟,误人子弟。喷的就是下面这几个出错的:
这几个基本上是互相抄的,没有验证,很容易反驳。比如,上面说"+", "-"的优先级大于“|”,那么以下代码
a := 2 | 4 - 1
的结果应该等同于
a := 2 | (4 - 1)
但实际上前者结果为5,后者的答案是3。原因是“-”运算符优先级与“|”实际上是相等的。
验证链接: go.dev/play/p/fPFN…
正确的运算符优先级
Google找到了官方的说明:
可以参考其中Operator Precedence一节,介绍的非常清楚。
- 单目运算符优先级最高。
单目运算符包括:
"+" | "-" | "!" | "^" | "*" | "&" | "<-"
- 双目运算符分5个优先级,从高到低为
Precedence Operator
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||
分别是: “乘法类”,“加法类”,“比较类”,“逻辑与”,“逻辑或”,优先级最低的是“逻辑或”。