• 【无标题】


    Go数据类型

    支持更新…
    在这里插入图片描述

    1 go语言中的数据类型

    (1)float32类型底层原理

    浮点数:小数点可以浮动的数,称为浮点数。与浮点数对应的还有定点数,也就是小数点不能浮动的数。

    举例:以100.23为例,如果存储成定点小数,此时如果小数点位置放错了,成了这样:1.0023,则最后的结果肯定错了。如果是浮点数,则小数点可以随意移动,可以表示成科学计数法的形式:1.0023*102,在计算中,数字都是2的正数幂表示,所以计算机中的表示方法一般都是某个小数乘以2k。

    float32如何如何将一个小数转成二进制数:

    • 整数部分:就和普通十进制数转成二进制数一样
    • 小数部分:让小数部分乘以2,如果得到的结果小于1,则继续乘以2,如果结果大于1,则将结果减去1再继续乘以2,直到结果刚好等于1为止,然后去每次乘积结果的整数部分的值为最终的二进制表示

    小数转成二进制数示例:
    在这里插入图片描述

    float32的底层存储将一个小数分成符号部分+指数部分+尾数部分存储:

    在这里插入图片描述

    其中

    • sign表示符号位,1表示负数,0表示正数
    • exponent表示指数位,指定了⼩数点在数据中的位置,指数可以是负数,也可以是正数,指数位的⻓度越⻓则数值 的表达范围就越⼤;
    • fraction表示尾数位,⼩数点右侧的数字,也就是⼩数部分,⽐如⼆进制 1.0011 x 2^(-2),尾数部分就是 0011, ⽽且尾数的⻓度决定了这个数的精度,因此如果要表示精度更⾼的⼩数,则就要提⾼尾数位的⻓度;

    float64的底层存储如下:

    • 符号位:1位
    • 指数位:11位
    • 尾数位:52位

    (2)string类型

    go语言中,采用UTF8编码技术、Unicode编码。

    UTF8是一种编码技术,除了UTF8之外、还有UTF16(使用2个字节或4个字节表示每个Unicode字符码点)、UTF32(4个字节表示每个Unicode字符码点)等。

    相对于UTF-16和UTF-32方案,UTF-8方案的空间利用率也是最高的。并且,utf8解码和编码时,也无需考虑字节序问题。

    以字符“中”为例,它的码点(序号)为U+4E2D,它在Utf8编码则为“0xE4 0xB8 0xAD”,即在内存中Go实际用三个字节来表示“中”这个Unicode字符。

    问:UTF8编码使用几个字节存储Unicode编码呢?

    答:

    • 前128个与ASCII字符重合的码点(U+0000~U+007F)使用1个字节表示;
    • 带变音符号的拉丁文、希腊文、西里尔字母、阿拉伯文等使用2个字节来表示;
    • 而东亚文字(包括汉字)使用3个字节表示;
    • 其他极少使用的语言的字符则使用4个字节表示

    (3)字符串和各种int类型之间的相互转换方式

    • string转成int

      int, err := strconv.Atoi(string)
      
      • 1
    • string转成int64

      int64, err := strconv.ParseInt(string, 10, 64)
      
      • 1
    • string转成uint64

      uint64, err := strconv.ParseUint(string, 10, 64)
      
      • 1
    • int转成string

      string := strconv.Itoa(int)
      
      • 1
    • int64转成string

      string := strconv.FormatInt(int64, 10)
      
      • 1
    • uint64转成string(10进制)

      string := strconv.FormatUint(uint64, 10)
      
      • 1
    • uint64转成string(16进制)

      string := strconv.FormatUint(uint64, 16)
      
      • 1

    (4)FAQ

    var a = 100
    
    • 1

    问:上面代码中,变量a属于什么数据类型?是intint8int16int32还是int64

    答:变量a默认是int数据类型。

    问:如何查看变量作占用的字节数?

    答:

    import "unsafe"
    
    func main () {
     bytesOfVariable := unsafe.Sizeof(variable)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    var a = 1.1
    
    • 1

    问:上面的代码中,变量a是什么数据类型?

    答:go语言中,上面的代码,变量a默认是float64数据类型的

    Reference

    1. https://blog.51cto.com/u_15076234/4119416
    2. Go字符串比较,终于有人讲清楚了
  • 相关阅读:
    蓝桥杯拿到一等奖,并分享经验
    OpenGL 波浪特效
    LeetCode:2385. 感染二叉树需要的总时间(DFS Java)
    【MySQL】视图与用户管理
    RabbitMQ入门教学
    数据结构与集合源码
    数组在TypeScript中是如何工作的
    开源任务调度框架
    数据结构与算法 - 树
    PTA 7-77 查找指定字符
  • 原文地址:https://blog.csdn.net/qq_33521184/article/details/128071187