数学运算

运算类型
数学运算
逻辑运算 / 比较运算
位运算

整型和浮点型转化

 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




}

 
原文地址:https://www.cnblogs.com/chaoyangxu/p/11798985.html