package main
import "fmt"
/* Golang 中的运算符
Golang内置的运算符:
1. 算术运算符:+ - * / %
2. 关系运算符:!= == > >= < <= 返回值是True或者False
3. 逻辑运算符:&& || !(逻辑NOT运算符,表示条件取反) 返回值是True或者False
4. 赋值运算符:= += -= *= /= %=
5. 位运算符(了解):位运算符对整数在内存中的二进制位进行操作。
注意:++(自增)和 --(自减)在Go语言中是单独的语句,并不是运算符。
*/
func test() bool {
fmt.Println("test......test......")
return true
}
func main() {
// 1. 算数运算
fmt.Println("10+3=", 10+3) // 10+3= 13
fmt.Println("10-3=", 10-3) // 10-3= 7
fmt.Println("10*3=", 10*3) // 10*3= 30
// 除法运算注意:如果运算的数都是整数,那么除后,会去掉小数部分,保留整数部分。
fmt.Println("10/3=", 10/3) // 10/3= 3
fmt.Println("10.0/3=", 10.0/3) // 10.0/3= 3.3333333333333335
fmt.Println("10%3=", 10%3) // 10%3= 1
fmt.Println("-10%3=", -10%3) // -10%3= -1
fmt.Println("10%-3=", 10%-3) // 10%-3= 1
fmt.Println("-10%-3=", -10%-3) // -10%-3= -1
fmt.Println()
// 1.1 ++ 和 -- 的错误使用方法如下
// 错误使用方式1:
//var i int = 8
//var a int
//a = i++ //直接报错,i++ 只能单独i自己使用
//a = i-- //直接报错,i-- 只能单独i自己使用
// 错误使用方式2:
//var i int = 8
//++i // 错误,在golang中没有 前++
//--i // 错误,在golang中没有 前--
// ++ 和 -- 的正确使用方式
var i int = 1
i++
fmt.Println("输出i=", i) // i= 2
// 2.关系运算,返回值为True或者False
// 演示关系运算符的使用
var n1 int = 9
var n2 int = 8
fmt.Println(n1 == n2) // false
fmt.Println(n1 != n2) // true
fmt.Println(n1 > n2) // true
fmt.Println(n1 >= n2) // true
fmt.Println(n1 < n2) // false
fmt.Println(n1 <= n2) // false
tag := n1 > n2
fmt.Println("tag=", tag) // tag= true
// 3.逻辑运算符,&& || !
// 3.1 && 逻辑AND运算符。如果两边的操作数都是True,则为True,否则为False。
var age int = 40
if age > 30 && age < 50 {
fmt.Println("OK1") // 这个条件满足,它会打印
}
if age > 30 && age < 40 {
fmt.Println("OK2") // 这个条件不满足,它不会被打印
}
// 3.2 || 逻辑OR运算符。如果两边的操作数有一个True,则为True,否则为False。
if age > 30 || age < 50 {
fmt.Println("OK3") // 这个条件满足,它会打印
}
if age > 30 || age < 40 {
fmt.Println("OK4") // 这个条件满足,它会打印
}
if age > 50 || age < 40 {
fmt.Println("OK5") // 这个条件不满足,它不会被打印
}
// 3.3 ! 逻辑NOT运算符。如果条件为True,取反后则为False,如果条件为False,取反后则为True。
// 演示一下逻辑运算符 ! 的使用
if age > 30 {
fmt.Println("OK6") // 这个条件满足,它会打印
}
if !(age > 50) {
// age的值是40,age > 50,这个条件不成立。前面加上!表示if条件取反
// 这个条件不成立,返回值为False,前面加上!表示if条件取反,条件就会成立(加上!真实条件就变成了age < 50)
fmt.Println("OK7") // 这个条件满足,它会打印
}
// 逻辑运算符短路演示
var is int = 10
if is < 9 && test() {
fmt.Println("...ok...ok...")
}
if is > 9 || test() {
fmt.Println("...hello...true...le...") // 这个条件满足,它会打印
}
// 4. 赋值运算符
/* 赋值运算符
赋值运算从右向左。
1. = 简单的赋值运算符,将一个表达式的值赋值给一个左值
2. += 相加后再赋值
3. -= 相减后再赋值
4. *= 相乘后再赋值
5. /= 相处后再赋值
6. %= 求余后再赋值
*/
dd := 8 + 2*8 // 赋值运算从右向左
fmt.Println(dd) // 24
x, y, z, n, k := 10, 200, 100, 30, 25
x += 5 // 相同于 x=x+5
fmt.Println("x += 5 的值是:", x) // x += 5 的值是: 15
y -= 5 // 相同于 y=y-5
fmt.Println("y -= 5 的值是:", y) // y -= 5 的值是: 195
z *= 5 // 相同于 z=z*5
fmt.Println("z *= 5 的值是:", z) // z *= 5 的值是: 500
n /= 5 // 相同于 n=n/5
fmt.Println("n /= 5 的值是:", n) // n /= 5 的值是: 6
k %= 5 // 相同于 k=k%5
fmt.Println("k %= 5 的值是:", k) // k %= 5 的值是: 0
// 5.运算符练习
// 练习1:有两个变量,aaa和bbb,要求将其进行交换,最终打印结果
aaa := 9
bbb := 2
ttt := aaa
aaa = bbb
bbb = ttt
fmt.Printf("交换后的情况是 aaa=%v, bbb=%v \n", aaa, bbb) // 交换后的情况是 aaa=2, bbb=9
// 练习2:假如还有100天放假,问:还有xx个星期零xx天
var days int = 100
var week int = days / 7
var day int = days % 7
fmt.Printf("距离放假目前还有 %d 个星期,零%d 天\n", week, day) // 距离放假目前还有 14 个星期,零2 天
/* 上面代码的全部打印结果如下所示:
PS C:\Users\Zhaoshan.lu\go\DaDi> go run .\07.go
10+3= 13
10-3= 7
10*3= 30
10/3= 3
10.0/3= 3.3333333333333335
10%3= 1
-10%3= -1
10%-3= 1
-10%-3= -1
输出i= 2
false
true
true
tag= true
OK1
OK3
OK4
OK6
OK7
...hello...true...le...
24
x += 5 的值是: 15
y -= 5 的值是: 195
z *= 5 的值是: 500
n /= 5 的值是: 6
k %= 5 的值是: 0
交换后的情况是 aaa=2, bbb=9
距离放假目前还有 14 个星期,零2 天
PS C:\Users\Zhaoshan.lu\go\DaDi>
*/
}