04-Go语言基础之运算符
运算符也就是常见的如数学运算,加减乘除,以及一些逻辑运算的符号。
Go语言支持的运算符有
- 算数运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
算术运算符
| 运算符 | 描述 |
|---|---|
| + | 相加 |
| - | 相减 |
| * | 相乘 |
| / | 相除 |
| % | 求余 |
注意:
++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。
package main
import "fmt"
func main() {
a := 22
b := 10
var c int
c = a + b
fmt.Printf("a,b之和=%d\n", c)
c = a - b
fmt.Printf("a-b=%d\n", c)
c = a * b
fmt.Printf("a*b=%d\n", c)
c = a / b
fmt.Printf("a*b=%d\n", c)
c = a % b
// 注意该百分号的转义写法 %% 表示 普通的百分号
fmt.Printf("a%%b=%d\n", c)
// ++ 自增1
a++
fmt.Printf("a自增后:%d\n", a)
a--
a--
fmt.Printf("a自减两次后:%d\n", a)
}
/*
结果
a,b之和=32
a-b=12
a*b=220
a*b=2
a%b=2
a自增后:23
a自减两次后:21
*/
关系运算符
下表列出了所有Go语言的关系运算符。
假定 A 值为 10,B 值为 20。
| 运算符 | 描述 | 实例 |
|---|---|---|
| == | 检查两个值是否相等,如果相等返回 True 否则返回 False。 | (A == B) 为 False |
| != | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 | (A != B) 为 True |
| > | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 | (A > B) 为 False |
| < | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 | (A < B) 为 True |
| >= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 | (A >= B) 为 False |
| <= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 | (A <= B) 为 True |
package main
import "fmt"
func main() {
var a int = 21
var b int = 10
if a == b {
fmt.Printf("第一行 - a 等于 b\n")
} else {
fmt.Printf("第一行 - a 不等于 b\n")
}
if a < b {
fmt.Printf("第二行 - a 小于 b\n")
} else {
fmt.Printf("第二行 - a 不小于 b\n")
}
if a > b {
fmt.Printf("第三行 - a 大于 b\n")
} else {
fmt.Printf("第三行 - a 不大于 b\n")
}
/* Lets change value of a and b */
a = 5
b = 20
if a <= b {
fmt.Printf("第四行 - a 小于等于 b\n")
}
if b >= a {
fmt.Printf("第五行 - b 大于等于 a\n")
}
}
/*
第一行 - a 不等于 b
第二行 - a 不小于 b
第三行 - a 大于 b
第四行 - a 小于等于 b
第五行 - b 大于等于 a
*/
逻辑运算符
下表列出了所有Go语言的逻辑运算符。假定 A 值为 True,B 值为 False。
| 运算符 | 描述 | 实例 | ||||
|---|---|---|---|---|---|---|
| && | 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 | (A && B) 为 False | ||||
| \ | \ | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 | (A \ | \ | B) 为 True | |
| ! | 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 | !(A && B) 为 True |
package main
import "fmt"
func main() {
var a bool = true
var b bool = false
if a && b {
fmt.Printf("第一行 - 条件为 true\n")
}
if a || b {
fmt.Printf("第二行 - 条件为 true\n")
}
/* 修改 a 和 b 的值 */
a = false
b = true
if a && b {
fmt.Printf("第三行 - 条件为 true\n")
} else {
fmt.Printf("第三行 - 条件为 false\n")
}
if !(a && b) {
fmt.Printf("第四行 - 条件为 true\n")
}
}
/*
第二行 - 条件为 true
第三行 - 条件为 false
第四行 - 条件为 true
*/
赋值运算符
下表列出了所有Go语言的赋值运算符。
| 运算符 | 描述 | 实例 | |||
|---|---|---|---|---|---|
| = | 简单的赋值运算符,将一个表达式的值赋给一个左值 | 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 | |||
| \ | = | 按位或后赋值 | C \ | = 2 等于 C = C \ | 2 |
package main
import "fmt"
func main() {
var a int = 21
var c int
c = a // 21
fmt.Printf("第 1 行 = 运算符实例,c 值为 = %d\n", c)
c += a // c=c+a 42
fmt.Printf("第 2 行 += 运算符实例,c 值为 = %d\n", c)
c -= a // c=c-a 21
fmt.Printf("第 3 行 -= 运算符实例,c 值为 = %d\n", c)
c *= a // c=c*a 21*21
fmt.Printf("第 4 行 *= 运算符实例,c 值为 = %d\n", c)
c /= a
fmt.Printf("第 5 行 /= 运算符实例,c 值为 = %d\n", c)
// 如下基于二进制的操作,可以先不看,一般只有go源码库里底层操作会见到
c = 200
c <<= 2
fmt.Printf("第 6行 <<= 运算符实例,c 值为 = %d\n", c)
c >>= 2
fmt.Printf("第 7 行 >>= 运算符实例,c 值为 = %d\n", c)
c &= 2
fmt.Printf("第 8 行 - &= 运算符实例,c 值为 = %d\n", c)
c ^= 2
fmt.Printf("第 9 行 - ^= 运算符实例,c 值为 = %d\n", c)
c |= 2
fmt.Printf("第 10 行 - |= 运算符实例,c 值为 = %d\n", c)
}
/*
第 1 行 = 运算符实例,c 值为 = 21
第 2 行 += 运算符实例,c 值为 = 42
第 3 行 -= 运算符实例,c 值为 = 21
第 4 行 *= 运算符实例,c 值为 = 441
第 5 行 /= 运算符实例,c 值为 = 21
第 6行 <<= 运算符实例,c 值为 = 800
第 7 行 >>= 运算符实例,c 值为 = 200
第 8 行 - &= 运算符实例,c 值为 = 0
第 9 行 - ^= 运算符实例,c 值为 = 2
第 10 行 - |= 运算符实例,c 值为 = 2
*/