运算类型 |
数学运算 |
逻辑运算 / 比较运算 |
位运算 |
整型和浮点型转化
1 //整型转浮点型(int ---> float64)
2
3 package main
4
5 import "fmt"
6
7 func main() {
8 var a = 123
9 fmt.Printf("a的类型是%T a的值是%v
", a, a) //a的类型是int a的值是123
10 b := float64(a) //转换
11 fmt.Printf("b的类型是%T b的值是%v
", b, b) //b的类型是float64 b的值是123 123代表123.0 虽然.0没有写.
12
13 }
1 //浮点型转整型(float64 ---> int)
2
3 package main
4
5 import "fmt"
6
7 func main() {
8 var a = 123.45
9 fmt.Printf("a的类型是%T a的值是%v
", a, a) //a的类型是float64 a的值是123.45
10 b := int64(a) //转换
11 fmt.Printf("b的类型是%T b的值是%v
", b, b) //b的类型是int64 b的值是123
12
13 }
基础数学运算
1 //基本数学运算
2 //整型 / 整型 = 整型 如: 10/3 =3
3 //浮点型 / 浮点型 = 浮点型 如: 10.0/3.0=3.3333333333333335
4
5
6
7 package main
8
9 import "fmt"
10
11 func main() {
12
13 fmt.Println(10 + 3) //加法
14 fmt.Println(10 - 3) //减法
15 fmt.Println(10 * 3) //乘法
16 fmt.Println(10 / 3) //除法
17 fmt.Println(10 % 3) //求模,求余
18 fmt.Println(((1+2)*3/4)%5) //复杂的四则运算,括号代表优先计算
19
20 }
高级数学运算
1 package main
2
3 import (
4 "fmt"
5 "math"
6 )
7
8 func main() {
9
10 fmt.Println(math.Round(3.4)) // 四舍五入
11 fmt.Println(math.Floor(3.99)) // 四舍五入 纯舍,不管小数是多少都舍去.
12 fmt.Println(math.Ceil(3.11)) // 四舍五入 纯入,不管小数是多少都进一位.
13 fmt.Println(math.Abs(-3.4)) // 绝对值
14 fmt.Println(math.Pow(2, 3)) // 2的三次方,三次幂 2*2*2
15 fmt.Println(math.Sqrt(9)) // 9的开方,平方根
16 fmt.Println(math.Pi) // Π 3.1415926
17 fmt.Println(math.Sin((30.0 / 180) * math.Pi)) // 三角函数,正旋
18 fmt.Println(math.Asin((30.0 / 180) * math.Pi)) // 反三角函数,正旋
19 fmt.Println(math.Cos((30.0 / 180) * math.Pi)) // 三角函数,余旋
20 fmt.Println(math.Tan((30.0 / 180) * math.Pi)) // 三角函数,正切
21
22 }
比较运算
1 //返回数值是True/False
2
3 package main
4
5 import "fmt"
6
7 func main() {
8 fmt.Println(3 > 4) //大于
9 fmt.Println(3 >= 4) //大于等于
10 fmt.Println(3 < 4) //小于
11 fmt.Println(3 <= 4) //小于等于
12 fmt.Println(3 == 4) //等于
13 fmt.Println(3 != 4) //不等于
14 }
逻辑运算
1 package main
2
3 import "fmt"
4
5 func main() {
6
7 fmt.Println(true && false) //与 俩者必须都ok 才ok
8 fmt.Println(true || false) //或 只要有一个ok,就ok
9 fmt.Println(!false) //非 你ok 结果就不ok
10
11 }
位运算
int 是有符号的
uint 是无符号的
1. 按位与
//12位与10
//10进制转2进制,双方都为1 结果就为1
12 = 1100
10 = 1010
1100
& 1010
--------
1000
//2进制转10进制
1000 = 8
//代码实现:
package main
import "fmt"
func main() {
fmt.Println(12 & 10) //8
}
3. 按位异或
//12位或10
//10进制转2进制,只要俩个结果不一样, 结果就为1
12 = 1100
10 = 1010
1100
& 1010
--------
0110
//2进制转10进制
0110 = 14
//代码实现:
package main
import "fmt"
func main() {
fmt.Println(12 ^ 10) //6
}
4. 移位运算
12 = 1100
如果12 是int类型 int 是8字节。
0000 1100 <--- 左移动2位
0011 0000 -- 结果是48
//左移2位,代码实现:
package main
import "fmt"
func main() {
var a int = 12
fmt.Println(a << 2) //48
}
01 有符号向左移位
package main
import "fmt"
func main() {
//uint 无符号位 没这个问题
// int 有符号位 当最高为1 需要改变正负数。
var a int = 12
//0000 1100
fmt.Println(a << 2) //0011 0000
fmt.Println(a << 3) //0110 0000 符号位第一位是0代表是整数。
// 符号位为1,是负数,它是一个补码,减一取反得到源码(
fmt.Println(a << 4) //1100 0000 -1 = 1011 1111 取反 0100 0000 = 192
fmt.Println(a << 5) //1000 0000
移动5位会触碰边界,丢失一位
fmt.Println(a << 5)
0000 1100 <-- 5位
1000 0000
}