Go 语言中运算符的分类
在了解 Go 语言中运算符的优先级之前,我们需要了解一下 Go 语言中的运算符的分类。Go 语言中的运算符包括算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、其他运算符等。这些运算符用于表达式运算,从而实现代码的功能。
算术运算符包括:+ (加)、- (减)、* (乘)、/ (除)、% (取模)。
比较运算符包括:== (等于)、!= (不等于)、> (大于)、>= (大于等于)、< (小于)、<= (小于等于)。
逻辑运算符包括:&& (逻辑与)、|| (逻辑或)、! (逻辑非)。
位运算符包括:& (按位与)、| (按位或)、^ (按位异或)、<< (左移)、>> (右移)、&^ (按位清空)。
赋值运算符包括:= (赋值)、+= (加赋值)、-= (减赋值)、*= (乘赋值)、/= (除赋值)、%= (取模赋值)、<<= (左移赋值)、>>= (右移赋值)、&= (按位与赋值)、|= (按位或赋值)、^= (按位异或赋值)、&^= (按位清空赋值)。
其他运算符包括:& (取地址)、* (取指针值)、<- (channel 接收/发送)。
Go 语言中运算符的优先级
除了赋值运算符的优先级最低,赋值运算符的优先级低于其他所有运算符,其余运算符的优先级大致按照以下顺序从高到低排列:
1. 单目运算符(优先级最高)
2. 算术运算符
3. 位运算符
4. 比较运算符
5. 逻辑运算符
6. channel 操作运算符
7. 组合运算符(优先级最低)
Go 语言中运算符优先级的示例
为了更好地理解运算符的优先级,下面我们来看一些示例:
(1) 位运算符优先级高于逻辑运算符。
func main() {
a := 2
b := 3
fmt.Println(a &^ b > 0) // 输出 false
}
在上面的代码中,&^ 是一个位运算符,其优先级高于逻辑运算符 >,在运算符优先级的规则下,a &^ b 会先执行,计算结果为 0,然后与 0 进行比较得到 false。
(2) 比较运算符优先级高于逻辑运算符。
func main() {
a := 2
b := 3
c := 4
fmt.Println(a < b && b < c) // 输出 true
}
在上面的代码中,< 是一个比较运算符,其优先级高于逻辑运算符 &&,按照运算符优先级的规则,a < b 会先被计算,计算结果为 true,然后再计算 b < c 的结果为 true,最终的结果为 true。
总结
Go 语言中的运算符包括算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、其他运算符等,它们用于表达式的运算。除了赋值运算符的优先级最低,其他运算符的优先级大致按照单目运算符、算术运算符、位运算符、比较运算符、逻辑运算符、channel 操作运算符、组合运算符的顺序排列。在运算符优先级的规则下,一条表达式会按照运算符的优先级顺序计算,常见的表达式计算过程易于理解,但在复杂的表达式中,需要特别注意运算符的优先级和表达式的计算顺序。