Go语言运算符优先级--全网最准确

2,022 阅读1分钟

Google排名靠前的答案是错的!

写Go代码时一下子想不起准确的运算符优先级了,Google搜索了下,发现前面几个SEO做的比较好的网址给的要不就是错的,要不就是写的乱七八糟,误人子弟。喷的就是下面这几个出错的:

这几个基本上是互相抄的,没有验证,很容易反驳。比如,上面说"+", "-"的优先级大于“|”,那么以下代码

a := 2 | 4 - 1

的结果应该等同于

a := 2 | (4 - 1)

但实际上前者结果为5,后者的答案是3。原因是“-”运算符优先级与“|”实际上是相等的。

验证链接: go.dev/play/p/fPFN…

正确的运算符优先级

Google找到了官方的说明:

可以参考其中Operator Precedence一节,介绍的非常清楚。

  1. 单目运算符优先级最高。

单目运算符包括:

"+" | "-" | "!" | "^" | "*" | "&" | "<-" 
  1. 双目运算符分5个优先级,从高到低为
Precedence    Operator
    5             *  /  %  <<  >>  &  &^
    4             +  -  |  ^
    3             ==  !=  <  <=  >  >=
    2             &&
    1             ||

分别是: “乘法类”,“加法类”,“比较类”,“逻辑与”,“逻辑或”,优先级最低的是“逻辑或”。