这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
什么是运算符?
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。golang的运算符与大部分语言运算符的语义都是相同的。
算术运算符
+ - * / %(余) ++ --
注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。
代码示例:
func main() {
a, b := 100,200
fmt.Printf("a 加 b = %d\n", a + b)
fmt.Printf("a 减 b = %d\n", a - b)
fmt.Printf("a 乘 b = %d\n", a * b)
fmt.Printf("a 除 b = %d\n", a / b)
}
关系运算符
== != > < >= <=
| == | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
|---|---|
| != | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
| 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 | |
| >= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
| < | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
| <= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
代码示例:
func main() {
a, b := 100, 200
//fmt.Println("a == b?", a == b) // a == b? false
//fmt.Println("a != b?", a != b) // a != b? true
//fmt.Println("a > b?", a > b ) // a > b? true
//fmt.Println("a >= b?", a >= b) // a >= b? false
//fmt.Println("a < b?", a < b ) // a >= b? true
//fmt.Println("a <= b?", a <= b ) // a <= b? true
}
逻辑运算符
| 运算符 | 描述 |
|---|---|
| && | 所谓逻辑与运算符。如果两个操作数都非零,则条件变为真 |
| || | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 |
| ! | 所谓逻辑非运算符。使用反转操作数的逻辑状态。如果条件为真,那么逻辑非操后结果为假 |
func main() {
a, b := true, false
fmt.Println("a && b ?", a && b) // a && b ? false
fmt.Println("a || b ?", a || b) // a || b ? true
fmt.Println(" !a ?", !a) // !a ? false
fmt.Println(" !b ?", !b) // !b ? true
}
位运算符
| 运算符 | 描述 |
|---|---|
| & | 参与运算的两数各对应的二进位相与。 (两位均为1才为1) |
| | | 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1) |
| 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1) | |
| << | 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
| >> | 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。 |
赋值运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| = | 简单的赋值操作符,分配值从右边的操作数左侧的操作数 | 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 |
运算符优先级
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
| 优先级 | 运算符 |
|---|---|
| 7 | ~ ! ++ -- |
| 6 | * / % << >> & &^ |
| 5 | + - ^ |
| 4 | == != < <= >= > |
| 3 | <- |
| 2 | && |
| 1 | \ |
当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。