数学运算

252 阅读3分钟
运算类型
数学运算
逻辑运算 / 比较运算
位运算

整型和浮点型转化

//整型转浮点型(int ---> float64)

package main

import "fmt"

func main() {
	var a = 123
	fmt.Printf("a的类型是%T a的值是%v\n", a, a)  //a的类型是int a的值是123
	b := float64(a)                              //转换
	fmt.Printf("b的类型是%T b的值是%v\n", b, b)  //b的类型是float64 b的值是123  123代表123.0 虽然.0没有写.

}

//浮点型转整型(float64 ---> int)

package main

import "fmt"

func main() {
	var a = 123.45
	fmt.Printf("a的类型是%T a的值是%v\n", a, a)  //a的类型是float64 a的值是123.45
	b := int64(a)                                //转换
	fmt.Printf("b的类型是%T b的值是%v\n", b, b)  //b的类型是int64 b的值是123

}

基础数学运算

//基本数学运算
//整型 / 整型 = 整型            如: 10/3 =3 
//浮点型 / 浮点型 = 浮点型      如: 10.0/3.0=3.3333333333333335



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))                     // 2的三次方,三次幂 2*2*2
	fmt.Println(math.Sqrt(9))                       // 9的开方,平方根
	fmt.Println(math.Pi)                            // Π 3.1415926
	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))   // 三角函数,正切

}


比较运算


//返回数值是True/False

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) //与  俩者必须都ok 才ok
	fmt.Println(true || false) //或  只要有一个ok,就ok
	fmt.Println(!false)        //非  你ok 结果就不ok
	
}



位运算


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

}



2. 按位或

//12位或10
//10进制转2进制,有一个为1 结果就为1 
  12 = 1100 
  10 = 1010 
  
    1100
  & 1010
  --------
    1110
   
//2进制转10进制
 1110 =  14
 


//代码实现: 
package main

import "fmt"

func main() {

fmt.Println(12 | 10) //14

}






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 
  
  如果12int类型  int8字节。
  0000 1100 <--- 左移动20011 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 <-- 51000 0000




}