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))
}
原文地址:https://www.cnblogs.com/sentangle/p/12242682.html