运算符用于在程序运行时执行数学或逻辑运算 Go 语言内置的运算符有:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
算术运算符:
package main
import "fmt"
func main() {
a, b := 10, 20
fmt.Println(a + b) // 30
fmt.Println(a - b) // -10
fmt.Println(a * b) // 200
fmt.Println(a / b) // 0 整数运算导致 如果想得到0.5 那么a和b其中一个 需要是浮点数
fmt.Println(a % b) // 10
a++
fmt.Println(a) // 11
a--
fmt.Println(a) // 10
}
关系运算符 返回值为bool
package main
import "fmt"
func main() {
a, b := 10, 20
fmt.Println(a == b) // false
fmt.Println(a != b) // true
fmt.Println(a > b) // false
fmt.Println(a < b) // true
fmt.Println(a >= b) // false
fmt.Println(a <= b) // true
}
逻辑运算符 返回值为bool
package main
func main() {
a, b := false, true
fmt.Println(a && b) // 逻辑与 两个都为真才为真 false
fmt.Println(a || b) // 逻辑或 一个为真就为真 true
fmt.Println(!a) // 逻辑取反 true
}
位运算符 对整数在内存中的二进制位进行操作
package main
import "fmt"
func main() {
a, b := 1, 2
// 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与
// 1的二进制为 0000 0001 2的二进制为 0000 0010 按位与 为 0000 0000
// 输出0
fmt.Println(a & b)
// 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或
// 1的二进制为 0000 0001 2的二进制为 0000 0010 按位或 为 0000 0011
// 输出3
fmt.Println(a | b)
// 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或
// 1的二进制为 0000 0001 2的二进制为 0000 0010 按位相异或 为 0000 0011
// 输出3
fmt.Println(a ^ b)
// 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方
// 1的二进制为 0000 0001 左移两位 就是0000 0100
// 输出4
fmt.Println(a << 2)
// 右移运算符">>"是双目运算符。右移n位就是除以2的n次方
// 1的二进制为 0000 0001 右移两位 就是0000 0000
// 输出0
fmt.Println(a >> 2)
}
赋值运算符
package main
import "fmt"
func main() {
a, b := 10, 20
a = 30
fmt.Println(a) // 30
a += b
fmt.Println(a) // 50
a -= b
fmt.Println(a) // 30
a *= b
fmt.Println(a) // 600
a /= b
fmt.Println(a) // 30
a %= b
fmt.Println(a) // 10
}
其他运算符
package main
import "fmt"
func main() {
a := 4
var ptr *int
ptr = &a
fmt.Println(&a) // 返回变量内存地址 0xc00000a0c8
fmt.Println(*ptr) // 指针变量 根据内存地址获取变量值 4
}
运算符优先级 5为最高 你可以通过使用括号来临时提升某个表达式的整体运算优先级
优先级 | 运算符 |
---|---|
5 | * / % << >> & &^ |
4 | + - |
3 | == != < <= > >= |
2 | && |
1 | || |