package main
import (
"fmt"
"math"
)
func main() {
/*加减乘除,求余*/
fmt.Println("5+3=", 5+3)
fmt.Println("5-3=", 5-3)
fmt.Println("5*3=", 5*3)
fmt.Println("5/3=", 5/3)
fmt.Println("5%3=", 5%3)
/*乘方和开方*/
fmt.Println("5^3=", math.Pow(5,3))
fmt.Println("125开3次方=", math.Pow(125.0, 1.0/3))
/*
四舍五入
负数的四舍五入原则:先对绝对值四舍五入,再加负号
*/
fmt.Println("3.49的四舍五入", math.Round(3.49))
fmt.Println("-3.49的四舍五入", math.Round(-3.49))
fmt.Println("3.51的四舍五入", math.Round(3.51))
fmt.Println("-3.51的四舍五入", math.Round(-3.51))
/*纯舍,纯入*/
fmt.Println("3.99的四舍五入", math.Floor(3.99))
fmt.Println("3.01的四舍五入", math.Ceil(3.01))
/*绝对值*/
fmt.Println("-3.14的绝对值", math.Abs(-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 main() {
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
}
输出结果:
true false true false true false false false true true true false false true false true
位运算
/*位运算
& 按位与 两位都为1,结果才为1
| 按位或 只要有一位为1,结果就位1
^ 按位异或 两位不相同,结果就为1,否则就为0
>>
<<
*/
func main() {
//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
}
输出:
2 55 53 92 5 112 224 -32