Golang学习之路一六运算符
算数运算符
| 符号 | 说明 |
|---|
| + | 相加 |
| - | 相减 |
| * | 相乘 |
| / | 相除 |
| % | 求余 |
| ++ | 自增 |
| – | 自减 |
package main
import "fmt"
func main() {
a := 10
b := 6
// +
fmt.Println(a+b)
// -
fmt.Println(a-b)
// *
fmt.Println(a*b)
// /
fmt.Println(a/b)
// %
fmt.Println(a%b)
// ++
fmt.Println(a)
a++
fmt.Println(a)
// -
fmt.Println(b)
b--
fmt.Println(b)
}
关系运算符
| 符号 | 说明 |
|---|
| == | 等于 |
| != | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
package main
import "fmt"
func main() {
a := 10
b := 6
// ==
fmt.Println(a==b)
// !=
fmt.Println(a!=b)
// >
fmt.Println(a>b)
// <
fmt.Println(a=
fmt.Println(a>=b)
// <=
fmt.Println(a<=b)
// ==
fmt.Println(a==b)
}
逻辑运算符
package main
import "fmt"
func main() {
a := 10
b := 6
c := 6
// &&
fmt.Println(a > b && b >= c)
// ||
fmt.Println(a > b || b > c)
// !
var d bool
fmt.Println(!d)
}
赋值运算符
| 运算符 | 描述 | 实例 |
|---|
| = | 简单的赋值运算符,将一个表达式的值赋给一个左值 | 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 |
| = | 按位或后赋值 |
位运算
| 运算符 | 描述 | 实例 |
|---|
| & | 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 | (A & B) 结果为 12, 二进制为 0000 1100 |
| | 按位或运算符" |
| ^ | 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 1。 | (A ^ B) 结果为 49, 二进制为 0011 0001 |
| << | 左移运算符"<<“是双目运算符。左移 n 位就是乘以 2 的 n 次方。 其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<"右边的数指定移动的位数,高位丢弃,低位补 0。 | A << 2 结果为 240 ,二进制为 1111 0000 |
| >> | 右移运算符">>“是双目运算符。右移 n 位就是除以 2 的 n 次方。 其功能是把”>>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数。 | A >> 2 结果为 1 |
package main
import "fmt"
func main() {
var a uint = 60
var b uint = 13
var c uint = 0
c = a & b
fmt.Println(c)
c = a | b
fmt.Println(c)
c = a ^ b
fmt.Println(c)
c = a << 2
fmt.Println(c)
c = a >> 2
fmt.Println(c)
}
其他运算符
| 运算符 | 描述 | 实例 |
|---|
| & | 返回变量存储地址 | &a; 将给出变量的实际地址。 |
| * | 指针变量。 | *a; 是一个指针变量 |
package main
import "fmt"
func main() {
var a int = 4
var b int32
var c float32
var ptr *int
fmt.Printf("a 变量类型为 = %Tn", a );
fmt.Printf("b 变量类型为 = %Tn", b );
fmt.Printf("c 变量类型为 = %Tn", c );
ptr = &a
fmt.Printf("a 的值为 %dn", a);
fmt.Printf("*ptr 为 %dn", *ptr);
}
运算符优先级
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
| 优先级 | 运算符 |
|---|
| 5 | * / % << >> & &^ |
| 4 | + - ^ |
| 3 | == != < <= > >= |
| 2 | && |
| 1 | |
当然,我们可以通过使用括号来临时提升某个表达式的整体运算优先级。