数学运算
运算类型 |
---|
数学运算 |
逻辑运算 / 比较运算 |
位运算 |
整型和浮点型转化
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\n", a, a) //a的类型是int a的值是123 10 b := float64(a) //转换 11 fmt.Printf("b的类型是%T b的值是%v\n", 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\n", a, a) //a的类型是float64 a的值是123.45 10 b := int64(a) //转换 11 fmt.Printf("b的类型是%T b的值是%v\n", 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 }