• go语言体系学习(二):数字变量


    整数型

    int8 数据范围:-2^7到2^7-1
    int16 数据范围:-2^15到2^15-1
    int32 数据范围:-2^31到2^31-1
    int64 数据范围:-2^63到2^63-1
    

    除了上述整数型,还有默认的数字类型int
    以上类型均为有符号型,对应还有无符号型

    uint8 数据范围:0到2^8-1
    uint16 数据范围:0到2^16-1
    uint32 数据范围:0到2^32-1
    uint64 数据范围:0到2^64-1
    

    浮点型

    float32 单精度
    float64 双精度
    
    var price float32 =12.0
    fmt.Println(price)
    

    默认情况的小数自动识别为 float64,没有数据类型float

    var weight = 170.0
    fmt.Println(weight)
    
    fmt.Println(reflect.TypeOf(weight)) //float64
    
    • 打印变量长度
    fmt.Println(unsafe.Sizeof(weight))  //8  float64为8个字节,64位
    fmt.Println(unsafe.Sizeof(age))     //8  int默认为8个字节,64位
    

    这里我们可以看出默认的int 和 int64 相同,至少在我这台机器的环境下

    补充

    这里算是插入一点计算机相关的基础,存储单位和有符号型。

    单位

    我们知道计算机底层是二进制,比如 00000001,而00000001由8位0,1数字构成,这里存储单位的最小单位 1bit就代表其中1位,也叫1比特,bit简写成b。而这里我们举例为00000001为8位,我们将8个bit叫一个字节用byte(发音不同 比特 和 百特)通常byte简写成B

    1B=8b
    1KB= 1024B
    1MB=1024KB
    1GB=1024MB
    1TB=1024GB
    1PB=1024TB
    1EB=1024PB
    1ZB=1024EB
    1YB=1024ZB
    
    无符号型

    计算机里的数字表示法,因为二进制里没有正负号,所以会把第一位用来标识正负号。正数第一位用0标识,负数的第一位用1标识。那么上面go语言中的int8的1就存储为00000001,而nt8的-1就存储为10000001。而int8能表示的负数范围为为1000000011111111为-(2^7-1)至-1,而正数范围为0000000101111111 为1至 2^7-1。而0可以用10000000表示,也可以用00000000表示(相当于正零和负零),那么为啥上文中写到 int8 数据范围:-2^7至 2^7-1。因为这里我们使用的是原码,计算机中有原码补码反码,而计算机语言中有符号型整形用反码表示,范围为 -2^7至 2^7-1。

    原码、反码、补码
    • 原码是符号位为最高位,0代表正数,1代表负数

    • 反码

      • 正数的反码不变,保持原来的表示方式
      • 负数的反码,符号位保持不变,其余位置取反
    • 补码

      • 正数还是和原码一致
      • 负数的补码,补码的基础上+1
    数值1 数值-1 数值 1+(-1)
    原码 00000001 10000001 10000010
    反码 00000001 11111110 11111111
    补码 00000001 11111111 00000000

    这里我们再来研究一下0

    +0 和 -0
    原码 00000000 和 10000000
    反码 00000000 和 11111111
    补码 00000000 和 100000000(9位溢出了,算出来相当于-128)

    这里我们课易看到 -0在补码中已经溢出了,溢出的 100000000 表示,所以并不存在-0,那么10000000(-0)就可以表示-128

  • 相关阅读:
    Linux设备驱动第六篇:高级字符驱动操作之iotcl
    Stack的三种含义
    用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发
    学会思考技术背后的那些思想和本质
    Rails 4.0.0 开发环境一切正常,到生成环境发现 无法找到 css 和 js
    一加手机,迟到的惊喜
    附近的人计算方法-----使用mysql脚本计算方法
    如何将Superset嵌入后台系统之实践
    这里是纯干货!2018年深度学习的10个发展预测
    这里是纯干货!2018年深度学习的10个发展预测
  • 原文地址:https://www.cnblogs.com/mxjhaima/p/14636488.html
Copyright © 2020-2023  润新知