Golang程序运算

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package main

import (
"fmt"
"math"
)

func main() {
var a int = 10

/*自加1*/
//a = a + 2
//a += 2
//a++

/*自减1*/
//a = a - 1
//a -= 2
//a--

/*自乘运算*/
//a = a * 2
//a *= 2

//a = a / 2
//a /= 2

/*自求模(余)*/
//a = a % 3
a %= 3

fmt.Println(a)
}

/*数学运算*/
func main051() {
/*加减乘除,求余*/
fmt.Println("5+3=", 5+3) //8
fmt.Println("5-3=", 5-3) //2
fmt.Println("5*3=", 5*3) //15
fmt.Println("5/3=", 5/3) //1
fmt.Println("5%3=", 5%3) //2

/*乘方和开方*/
fmt.Println("5^3=", math.Pow(5, 3)) //125
fmt.Println("125开三次方=", math.Pow(125.0, 1.0/3.0)) //5

/*
四舍五入
负数的四舍五入原则:先对绝对值四舍五入,再加负号
*/
fmt.Println("3.49的四舍五入=", math.Round(3.49)) //3
fmt.Println("3.51的四舍五入=", math.Round(3.51)) //4
fmt.Println("-3.49的四舍五入=", math.Round(-3.49)) //-3
fmt.Println("-3.51的四舍五入=", math.Round(-3.51)) //-4

/*纯舍与纯入*/
fmt.Println("3.49的四舍五入=", math.Floor(3.99)) //3
fmt.Println("3.51的四舍五入=", math.Ceil(3.01)) //4

/*绝对值*/
fmt.Println("-3.14的绝对值", math.Abs(-3.14)) //3.14

/*
三角函数:
参数必须是弧度而不是角度
*/
fmt.Println("30°的正弦=", math.Sin((30.0/180)*math.Pi))
fmt.Println("30°的余弦=", math.Cos((30.0/180)*math.Pi))
fmt.Println("30°的正切=", math.Tan((30.0/180)*math.Pi))
fmt.Println("30°的余切=", 1.0/math.Tan((30.0/180)*math.Pi))

/*反三角函数*/
fmt.Println("正弦为0.5的角度是", math.Asin(0.5)) //0.5235987755982989=30度的弧度表示

}

/*
比较运算
比较运算符:>,<,==,!=,>=,<=
比较运算的结果是布尔值:true或false
*/

/*
逻辑运算
逻辑与:两者都为真,结果才为真
逻辑或:两者只要有一个为真,结果就为真
逻辑非:非真为假,非假为真
*/
func main052() {
a1 := (1+1 == 2) //true
a0 := (1+1 != 2) //false
b1 := (1+1 >= 2) //true
b0 := (1+1 < 2) //false
fmt.Println(a1, a0, b1, b0)

/*逻辑与*/
fmt.Println(a1 && b1) //true
fmt.Println(a1 && b0) //false
fmt.Println(a0 && b1) //false
fmt.Println(a0 && b0) //false

/*逻辑或*/
fmt.Println(a1 || b1) //true
fmt.Println(a1 || b0) //true
fmt.Println(a0 || b1) //true
fmt.Println(a0 || b0) //false

/*逻辑或*/
fmt.Println(!a1) //false
fmt.Println(!a0) //true
fmt.Println(!b1) //false
fmt.Println(!b0) //true
}

/*
位运算
& 按位与 两位都为1,结果才为1
| 按位或 只要有一位为1,结果就为1
^ 按位异或 两位不相同,结果就为1,否则就为0
<<
>>
*/
func main053() {
//a := 23
//b := 34
var a uint8 = 23
var b uint8 = 34

fmt.Println(a & b) //2
fmt.Println(a | b) //55
fmt.Println(a ^ b) //53

/*移位运算*/
fmt.Println(a << 2) //92
fmt.Println(a >> 2) //5

/*
左移的溢出
a为无符号8位整型,向左侧溢出后,最高位为数据位
*/
fmt.Println(a << 4) //112
fmt.Println(a << 5) //1110,0000无符号为224

/*
左移的溢出
a为有符号8位整型,向左侧溢出后,最高位为符号位——要考虑正负数问题
最高位为0,非负数
最高位为1,负数的反码,-1再取反得到绝对值
*/
var c int8 = 23
fmt.Println(c << 5) //1110,0000有符号-32
}