Go基础-运算符

摘要

待续。。。

算术运算符:+,-,*,/,%,++,--

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import "fmt"

func main() {
/*
算术运算符: arithmetic operator
+, -, * ,/ , % , ++, --
/,取商
%,取余,取模
*/
a := 9
b := 4
sum := a + b // 求和
sub := a - b //做差
mul := a * b // 乘法
div := a / b // 除
fmt.Println(a, "+", b, "=", sum)
fmt.Println(sub, mul, div)
mod := a % b
fmt.Println(mod)
/*
8/5 = 1
8%5 = 3
3/4 = 0
3%4 = 3
7/3 = 2
7%3 = 1
2/1 = 2
2%1 = 0
*/

fmt.Println("a的数值:", a)
a++ // 给a自增1 a = a + 1
fmt.Println("a的数值:", a)
a-- // 给a自减1
fmt.Println(a)
}

关系运算符:>,<,>=,<=,==,!= 计算结果是bool

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "fmt"

func main(){
/*
关系运算符:运算结果是bool
>,<,>=,<=, ==, !=
==,判断两个数值是否相等
!=,判断两个数值是否不等
*/
a := 8
b := 5
fmt.Println(a < b)// 8 < 5,false
fmt.Println(a == b) // false
fmt.Println(a != b) // true

c := true
d := false
//fmt.Println(c < d) // bool类型不能比较大小
fmt.Println(c == d) // false

}

逻辑运算符:&&,||,!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package main

import "fmt"

func main() {
/*
逻辑运算符:
&&,逻辑与,"并且"
所谓逻辑与运算符。如果两个操作数都非零,则条件变为真
如果两个操作数都为true,结果才为true。
逻辑与的判定规则:
所有的操作数从左向右运算,
如果遇到一个false就直接返回结果为false,
除非所有的操作数都为true,结果才为true。
"全真为真,一假为假"
||,逻辑或,"或者"
所谓的逻辑或操作。如果任何两个操作数是非零,则条件变为真
逻辑或的判定规则:
所有的操作数从左向右运算,
如果遇到一个true就直接返回结果为true,
除非所有的操作数都为false,结果才为false。
"一真为真,全假为假"
!,逻辑非,"就是取反"
true,--->false
false,--->true
*/
b1 := false
b2 := false
b3 := true
res1 := b1 && b2 && b3 // 逻辑与
fmt.Println(res1)
res2 := b1 || b2 || b3 // 逻辑或
fmt.Println(res2)
res3 := !b1 // 逻辑非-->取反
fmt.Println(res3)

a := 3
b := 4
c := true

res4 := a < 4 && b / 2 >1 && c
// T T T
res5 := a * 2 < b && b % 2 != 0 && !c
// F F F
res6 := (a + b)/b >= 0 || !c || b % 2 == 0
// T F T
res7 := !(a * 2 < b)
// !F
fmt.Println(res4) // true
fmt.Println(res5) // false
fmt.Println(res6) // true
fmt.Println(res7) // true
}

位运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main

import "fmt"

func main() {
/*
位运算符:将数值转为二进制,按位操作
&:按位与,都为1才为1,有一个为0就为0
|:按位或,都为0才为0,有衣蛾为1就为1
^:异或操作,不同为1,相同为0
<<:左移, A << B,将A转为二进制,向左移动B位
相当于A*2的B次方
>>:右移,A >> B,向右移动B位
*/
a := 60
b := 13

/*
60=32+16+8+4
13=8+4+1
a: 0011 1100
b: 0000 1101
&: 0000 1100
|:0011 1101
^:0011 0001
*/
res1 := a & b
res2 := a | b
res3 := a ^ b
fmt.Println(res1) // 12
fmt.Println(res2) // 61
fmt.Println(res3) // 49
fmt.Printf("%b,%b\n", a, b)

/*
b = 13
b: 0000 1101
<<2:00 110100 = 32+16+4
>>2:0000 0011
*/
res4 := b << 2
b = 13
res5 := b >> 2
fmt.Println(res4, res5)

}

赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import "fmt"

func main() {
/*
赋值运算符:=, +=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=
=,a = b,将=右侧的数值b,赋值给=左边的变量a
+=, a += b,相当于:a = a + b
%=, a %= b,相当于:a = a % b
*/
var a int
a = 4 // 将数值4赋值给变量a
b := 3
fmt.Println(a)

a += 2 // a=6,b=3
a *= b // a=18,b=3
b %= 3 // a=18,b=0
//a &= 4
//a /= b // 除零,runtime error: integer divide by zero

fmt.Println(a, b)

}