zoukankan      html  css  js  c++  java
  • golang中基本类型存储大小和转换

    Go语言的基本类型有:

    bool
    string
    int、int8、int16、int32、int64
    uint、uint8、uint16、uint32、uint64、uintptr
    byte // uint8 的别名
    rune // int32 的别名
    float32、float64
    complex64、complex128
    

    当一个变量被声明之后,系统自动赋予它该类型的零值:

    int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等
    

    一、基本类型存储大小

    位(bit):是计算机中最小的数据单位,每一位的状态只能是0或1;  
    
    字节(byte):8个位构成一个字节,是存储的基本计量单位;  
    
    字符:字符是由一个或多个字节组成。
    
    ASCII码:用于将字母转为数字来存储
    

    1.1 bool和string

    bool占 1 byte

    字母和特殊符号转换数字后存储 占1字节
    中文(utf-8) 占3字节

    1.2 int/int8/int16/int32/int64 和 uint/uint8/uint16/uint32/uint64/uintptr

    数字由十进制转为二进制来存储,负数以补码的形式存储,小数以浮点数形式存储

    最高 bit 位用来表示符号位,一个 n-bit 的有符号数的取值范围是从 -2(n-1) 到 2(n-1)-1。无符号整数的所有 bit 位都用于表示非负数,取值范围是 0 到 2n-1。

    int8 ---->(-128 到 127)
    int16 --->(-32768 到 32767)
    int32 --->(-2147483648 到 2147483647)
    int64 --->(-9223372036854775808 到 9223372036854775807)
    
    uint8 --->(0 到 255)
    uint16 -->(0 到 65535)
    uint32 -->(0 到 4294967295)
    uint64 -->(0 到 18446744073709551615)
    

    实际开发中由于编译器和计算机硬件的不同,int 所能表示的整数大小会在 32bit 或 64bit 之间变化

    64位操作系统, int默认是int64
    32位操作系统, int默认是int32
    

    无符号的整数类型 uintptr,它没有指定具体的 bit 大小但是足以容纳指针。

    1.3 byte和rune

    byte uint8 的别名
    rune int32 的别名 代表一个 Unicode 码

    1.4 float32、float64

    float32 占用4个字节
    float64 占用8个字节

    浮点数取值范围的极限值可以在 math 包中找到:

    常量 math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38;
    常量 math.MaxFloat64 表示 float64 能取到的最大数值,大约是 1.8e308;
    float32 和 float64 能表示的最小值分别为 1.4e-45 和 4.9e-324。
    

    二、转换

    只有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型),不同底层类型的变量相互转换时会引发编译错误
    打印 类型和值
    fmt.Printf("%T %v ",str,str)

    strconv库

    2.1 string 与 int 类型之间的转换

    func Itoa(i int) string
    
    func Atoi(s string) (i int, err error)
    

    2.2 Parse 系列函数

    Parse 系列函数用于将字符串转换为指定类型的值,其中包括 ParseBool()、ParseFloat()、ParseInt()、ParseUint()。

    func ParseBool(str string) (value bool, err error)
    
    func ParseInt(s string, base int, bitSize int) (i int64, err error)
    
    func ParseUint(s string, base int, bitSize int) (n uint64, err error)
    
    func ParseFloat(s string, bitSize int) (f float64, err error)
    

    2.3 Format 系列函数

    Format 系列函数实现了将给定类型数据格式化为字符串类型的功能,其中包括 FormatBool()、FormatInt()、FormatUint()、FormatFloat()。

    func FormatBool(b bool) string
    
    func FormatInt(i int64, base int) string
    
    func FormatUint(i uint64, base int) string
    
    func FormatFloat(f float64, fmt byte, prec, bitSize int) string
    

    2.4 Append 系列函数

    Append 系列函数用于将指定类型转换成字符串后追加到一个切片中,其中包含 AppendBool()、AppendFloat()、AppendInt()、AppendUint()。

    Append 系列函数和 Format 系列函数的使用方法类似,只不过是将转换后的结果追加到一个切片中。

    示例代码如下:

    package main
    import (
        "fmt"
        "strconv"
    )
    func main() {
        // 声明一个slice
        b10 := []byte("int (base 10):")
      
        // 将转换为10进制的string,追加到slice中
        b10 = strconv.AppendInt(b10, -42, 10)
        fmt.Println(string(b10))
        b16 := []byte("int (base 16):")
        b16 = strconv.AppendInt(b16, -42, 16)
        fmt.Println(string(b16))
    }
  • 相关阅读:
    Spark源码学习1.1——DAGScheduler.scala
    Spark随笔(三):straggler的产生原因
    Spark随笔(二):深入学习
    Spark随笔(一):Spark的综合认识
    Hadoop随笔(二):Hadoop V1到Hadoop V2的主要变化
    Hadoop随笔(一):工作流程的源码
    zookeeper 安装笔记 3.6.7
    OpenStack 与 大数据的融合
    三 概要模式 3) MR计数器计数 。无 reduce 计数
    五 数据组织模式 2) 分区模式 代码
  • 原文地址:https://www.cnblogs.com/sentangle/p/12242682.html
Copyright © 2011-2022 走看看