| 运算类型 |
| 数学运算 |
| 逻辑运算 / 比较运算 |
| 位运算 |
整型和浮点型转化
package main
import "fmt"
func main() {
var a = 123
fmt.Printf("a的类型是%T a的值是%v\n", a, a)
b := float64(a)
fmt.Printf("b的类型是%T b的值是%v\n", b, b)
}
package main
import "fmt"
func main() {
var a = 123.45
fmt.Printf("a的类型是%T a的值是%v\n", a, a)
b := int64(a)
fmt.Printf("b的类型是%T b的值是%v\n", b, b)
}
基础数学运算
package main
import "fmt"
func main() {
fmt.Println(10 + 3)
fmt.Println(10 - 3)
fmt.Println(10 * 3)
fmt.Println(10 / 3)
fmt.Println(10 % 3)
fmt.Println(((1+2)*3/4)%5)
}
高级数学运算
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Round(3.4))
fmt.Println(math.Floor(3.99))
fmt.Println(math.Ceil(3.11))
fmt.Println(math.Abs(-3.4))
fmt.Println(math.Pow(2, 3))
fmt.Println(math.Sqrt(9))
fmt.Println(math.Pi)
fmt.Println(math.Sin((30.0 / 180) * math.Pi))
fmt.Println(math.Asin((30.0 / 180) * math.Pi))
fmt.Println(math.Cos((30.0 / 180) * math.Pi))
fmt.Println(math.Tan((30.0 / 180) * math.Pi))
}
比较运算
package main
import "fmt"
func main() {
fmt.Println(3 > 4)
fmt.Println(3 >= 4)
fmt.Println(3 < 4)
fmt.Println(3 <= 4)
fmt.Println(3 == 4)
fmt.Println(3 != 4)
}
逻辑运算
package main
import "fmt"
func main() {
fmt.Println(true && false)
fmt.Println(true || false)
fmt.Println(!false)
}
位运算
int 是有符号的
uint 是无符号的
1. 按位与
12 = 1100
10 = 1010
1100
& 1010
--------
1000
1000 = 8
package main
import "fmt"
func main() {
fmt.Println(12 & 10)
}
2. 按位或
12 = 1100
10 = 1010
1100
& 1010
--------
1110
1110 = 14
package main
import "fmt"
func main() {
fmt.Println(12 | 10)
}
3. 按位异或
12 = 1100
10 = 1010
1100
& 1010
--------
0110
0110 = 14
package main
import "fmt"
func main() {
fmt.Println(12 ^ 10)
}
4. 移位运算
12 = 1100
如果12 是int类型 int 是8字节。
0000 1100 <--- 左移动2位
0011 0000 -- 结果是48
package main
import "fmt"
func main() {
var a int = 12
fmt.Println(a << 2)
}
01 有符号向左移位
package main
import "fmt"
func main() {
var a int = 12
fmt.Println(a << 2)
fmt.Println(a << 3)
fmt.Println(a << 4)
fmt.Println(a << 5)
移动5位会触碰边界,丢失一位
fmt.Println(a << 5)
0000 1100 <-- 5位
1000 0000
}