一、浮点数

1、概述

  • 浮点类型用于存储带有小数点的数字
  • 一个整数数值可以赋值给浮点类型但是一个整型变量不可以赋值给浮点类型
  • 浮点数进行运算的结果是浮点数
  • Go语言中浮点类型有两个
    • float32
    • float64

2、浮点数取值范围

  • float32和float64取值范围

    类型 取值范围
    float32 3.40e+38
    float64 1.798e+308
  • 可以通过math或中常量快速获取浮点数的最大值

    package main
    
    import (
    "fmt"
    "math"
    ) func main() {
    fmt.Println(math.MaxFloat32)
    fmt.Println(math.MaxFloat64)
    }

3、浮点运算

  • float32和float64之间不可以相互运算,需要进行类型转换

    package main
    
    import (
    "fmt"
    ) func main() {
    var a float32 = 1.5
    var b float64 = 3.3
    fmt.Println(a + float32(b))
    fmt.Println(float64(a) + b)
    }
  • 建议使用float64,虽然占用空间多,但是float32在累计运算时可能出现误差

  • 整型运算和浮点型运算结果类型为本身类型

    package main
    
    import (
    "fmt"
    ) func main() {
    var a, b int = 2, 3
    var c, d float64 = 3, 2
    fmt.Println(a / b)
    fmt.Println(c / d)
    }

二、布尔类型

1、介绍

  • 布尔类型关键字为bool
  • 布尔类型可取值只有两个
    • true代表真,表示成立,二进制用1表示真
    • false代表假,表示不成立,二进制用0表示假
  • 布尔类型不能与其他类型相互转换
  • 布尔类型占用1个byte
  • 布尔类型单独使用较少,多用在判断中

2、示例

  • 创建bool类型变量

    package main
    
    import (
    "fmt"
    ) func main() {
    var a bool = true
    var b bool = false
    var c = true
    d := false
    fmt.Println(a, b, c, d)
    }
  • 使用unsafe包下的Sizeof()可以查看类型占用字符

    package main
    
    import (
    "fmt"
    "unsafe"
    ) func main() {
    a := false
    fmt.Println(unsafe.Sizeof(a))
    }
  • 虽然bool类型占用一个byte,但是bool不能和byte或int8相互转换

    package main
    
    import (
    "fmt"
    ) func main() {
    var a int8 = 1
    var b byte = 0
    var c bool = false
    fmt.Println(a, b, c)
    a = int8(c) //cannot convert c (type bool) to type int8
    b = byte(c) //cannot convert c (type bool) to type byte
    c = bool(a) //cannot convert a (type int8) to type bool
    c = bool(b) //cannot convert b (type byte) to type bool
    b = byte(a)
    }
  • 布尔类型除了直接赋值true或false以外,还可以用表达式赋值,借助比较运算符、逻辑运算符

三、运算符

1、概述

  • Go语言支持运算符,算数运算符、比较运算符、逻辑运算符、赋值运算符、关系运算符、位运算符
  • 不同的运算符使用场景不同,运算符一起使用时还需要注意优先级问题

2、算数运算符

  • 算数运算符对浮点数和整型进行数学运算

  • 乘法、除法优先级高于取余,取余高于加法、减法

    运算符 含义
    + 加法
    - 减法
    * 乘法
    / 除法
    % 取余
    ++ 自增1
    -- 自减1

3、比较运算符

  • 比较运算符用于比较两个内容的大小,判断和分支中使用频率较高

    运算符 含义
    == 是否等于,返回值为bool类型,判断是否成立
    != 不等于
    > 大于
    < 小于
    >= 大于等于
    < 小于
    <= 小于等于

4、逻辑运算符

  • 逻辑运算符在判断和分支中使用频率较高

    运算符 含义
    ! 逻辑非,取结果的反
    && 逻辑与,只有两侧同时为真时,总体结果为真
    || 逻辑或,两侧只要有一个为真时,整体为真

5、赋值运算符

  • 赋值运算符目的给变量赋值

  • 提供了很多运算的简单方式

    运算符 含义
    = 右侧内容赋值给左侧变量
    += A+=B相当于A=A+B
    -= A-=B相当于A=A-B
    *= ……
    /= ……
    %= ……
    <<= ……
    >>= ……
    &= ……
    |= ……
    ^= ……

四、位元素符

1、原码、反码、补码

  • 位运算时,需要知道几个概念,原码、反码、补码,正数在计算机中二进制还是原值,负数在计算机中存储的是补码
  • 原码
    • 正数的原码还是正数
    • 负数的原码是负数绝对值的二进制表示
    • 以8位二进制方式表示
  • 反码
    • 正数的反码还是正数
    • 负数的反码是所有位取反
  • 补码
    • 正数的补码还是正数
    • 负数的补码为负数的反码加一,负数的补码就是负数在计算机中二进制表示方式
    • 想要知道负数二进制对应十进制数据就是补码->反码->原码->添加符号
    • 如果是16位只要在负数前面添加8个1,正数前面添加8个零

2、Go语言中位运算符

  • 位运算在算法中使用频率较高

  • 区块连学习中密码学部分的很多算法都是使用的位运算

    运算符 含义
    << 二进制左移
    >> 二进制右移
    | 位运算符或OR,有1取1
    & 位运算符与AND,转换二进制,都为1取1
    ^ 位运算符异或XOR,二阶运算相同为0,不同为1,一阶运算加1后正数交互
    &^ 位清空(AND NOT),如果右侧0左侧不变,如果右侧为1左侧一定凊零,a&b=a&(b)

五、字符串

1、概述

  • 字符串是一段不可变的字符序列,内容是任意内容,可以是一段文字,也可以是一串数字,但是字符串类型数字不能进行数学运算,必须转换成整型或浮点型

  • 字符串类型关键字:string

  • 创建字符串类型变量

    var s string = "smalling"
    s1 := "smalling"
  • 字符串类型的值使用双引号“”扩上,内容支持转义字符串,两侧使用反单引号时原格式输出

    func main(){
    a := "a\tbc"
    b := `a\tbc`
    fmt.Println(a) //输出:a abc
    fmt.Println(b) //输出:a\tbc
    }

2、字符串和数值转换

  • 包strconv提供了字符串和其他类型相互转换的函数,下面以字符串和数值类型转换为例

    package main
    
    import (
    "fmt"
    "strconv"
    ) func main() {
    s := "11" /*
    第1个参数:需要转换的字符串变量
    第2个参数:这个数字是几进制,常用取值2,8,10,16
    第3个参数:认为这个数字的整数类型,可取值0,8,16,32,64
    但是由于方法最后返回值是int64,所以第三个参数无论设置什么最终结果都是int64
    */
    i, _ := strconv.ParseInt(s, 10, 8)
    fmt.Println(i)
    fmt.Printf("%T\n", i) //简单写法,相当于strconv.ParseInt(s,10,64)
    i1, _ := strconv.Atoi(s)
    fmt.Println(i1)
    }
  • int和string相互转换

    package main
    
    import (
    "fmt"
    "strconv"
    ) func main() {
    i := 11 /*
    第一个参数:必须是int64类型
    第二个参数:进制数
    */
    s := strconv.FormatInt(int64(i), 10)
    fmt.Println(s) //输出:11
    fmt.Printf("%T\n", s) //输出:string /*
    由于平时常用int,且使用短变量时整数默认是int类型
    所以下面方式较常用,把int转换为string
    */
    s1 := strconv.Itoa(i)
    fmt.Println(s1) //输出:11
    fmt.Printf("%T", s1) //输出:string
    }
  • string转换为floatXX类型

    package main
    
    import (
    "fmt"
    "strconv"
    ) func main() { s := "1.5" /*
    把字符串转换为指定类型
    第一个参数:字符串
    第二个参数:可取值为32和64,分别表示float32和float64
    返回值是float64
    */
    f, _ := strconv.ParseFloat(s, 64)
    fmt.Println(f)
    fmt.Printf("%T", f)
    }
  • floatXX转换为string类型

    package main
    
    import (
    "fmt"
    "strconv"
    ) func main() { f := 1.5
    /*
    把浮点型转换为字符串类型
    第一个参数:浮点型变量
    第二个参数:
    'f' (-ddd.dddd)
    'b' (-ddddp±ddd,指数为二进制)
    'e' (-d, dddde±dd,十进制指数)
    'E' (-d, ddddE±dd,十进制指数)
    'g' (指数很大时用'e'格式,否则'f'格式)
    'G' (指数很大时用'E'格式,否则'f'格式)
    第三个参数:小数点精度
    第四个参数:浮点型变量类型,64表示float64,32表示float32
    */
    s := strconv.FormatFloat(f, 'f', 5, 64) fmt.Println(s)
    fmt.Printf("%T", s)
    }

Go语言学习笔记(三)的更多相关文章

  1. Go语言学习笔记三: 常量

    Go语言学习笔记三: 常量 定义常量 常量就是在声明后不能再修改的量. const x int = 100 const y string = "abc" const z = &qu ...

  2. 【GO】GO语言学习笔记三

    7.数组: 几乎是最常用的数据类型了... 数组就是指一系列同一类型数据 的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数 组的长度. 常规的数组声明方法: ...

  3. Go语言学习笔记(三) [控制结构、内建函数]

    日期:2014年7月21日   一.控制结构   1.Go中,只有几个控制结构,它没有do或者while循环,有for,灵活的switch语句和if,在switch中可以接受像for那样可选的初始化语 ...

  4. c语言学习笔记三

    第三章,函数 字符串函数 //strcmp int my_strcmp(char *str1,char *str2) {   while(*str1 = = *str2)   /*不可用while(* ...

  5. [C语言学习笔记三]格式化输出和输入

    使用 printf 函数来输出,使用 scanf 函数来输入 在 printf 函数中使用变量,需要使用占位符代替. int 型一般存储整数,使用 %d 代替 long long int 型一般存储长 ...

  6. JavaScript--基于对象的脚本语言学习笔记(三)

    事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv=&q ...

  7. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  8. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  9. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  10. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

随机推荐

  1. 解决tomcat控制台乱码问题

    问题原因:编码不一致,tomcat启动后默认编码UTF-8,而windows的默认编码是GBK.所以只需配置启动tomcat后为GBK编码即可. 做法:找到路径 $xxx$\apache-tomcat ...

  2. HttpClient的CircularRedirectException解决办法

    解决方法: HttpGet httpGet = new HttpGet(" http://XXXX.XXX"); httpGet.getParams().setParameter( ...

  3. PowerDesigner 16.5安装、激活

    PowerDesigner安装 PowerDesigner激活 PowerDesigner运行

  4. vue使用过程中遇到的细节问题

    1. 在methods 中添加一个方法.如果这个方法使用箭头函数的话,箭头函数中的this不是当前的vue实例,所以通过this.xxx是获取不到实例上面的属性的,这时我们可以用函数的简写来获取到实例 ...

  5. springboot 服务卡死 连接池查询无响应问题解决

    排查背景:基于nacos + springboot + druid +mybatis + mysql的环境,服务突然就出现不可访问,所有连接都超时,重启就可以使用一会,过一会就又不可用了 排查出来的原 ...

  6. SIMS(secondary ion mass spectroscopy)二次离子质谱

    1.仪器介绍 二次离子质谱(SIMS)是一种用于通过用聚焦的一次离子束溅射样品表面并收集和分析喷射的二次离子来分析固体表面和薄膜的组成的技术.SIMS是最灵敏的表面分析技术,元素检测限为百万分之几到十 ...

  7. SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法----Ribbon(三)

    一.Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端  负载均衡的工具(这里区别于nginx的负载均衡).简单来说,Ribbon是Netf ...

  8. C语言:将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边。-在m行m列的二维数组中存放如下规律的数据,

    //将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边. #include <stdio.h> #define M 3 #define N 5 ...

  9. 刷题64. Minimum Path Sum

    一.题目说明 题目64. Minimum Path Sum,给一个m*n矩阵,每个元素的值非负,计算从左上角到右下角的最小路径和.难度是Medium! 二.我的解答 乍一看,这个是计算最短路径的,迪杰 ...

  10. PHP如何实现处理过期或者超时订单的,并还原库存

    订单是我们在日常开发中经常会遇到的一个功能,最近在做一个订单过期与超时的开发.订单过期与超时就不用我解释了吧,其实两者都是同一个问题来着,就是订单未支付的处理,我们要做的是对这些未支付的订单到了一定时 ...