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\n",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))
}
golang中基本类型存储大小和转换的更多相关文章
- golang中函数类型
今天看Martini文档,其功能列表提到完全兼容http.HandlerFunc接口,就去查阅了Go: net/http的文档,看到type HandlerFunc这部分,顿时蒙圈了.由于之前学习的时 ...
- golang中值类型/指针类型的变量区别总结
转自:https://segmentfault.com/a/1190000012329213 值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string ...
- golang中浮点型底层存储原理和decimal使用方法
var price float32 = 39.29 float64和float32类似,只是用于表示各部分的位数不同而已,其中:sign=1位,exponent=11位,fraction=52位,也就 ...
- C++中整型变量的存储大小和范围
一.代码查看 #include <iostream> #include <climits> using namespace std; int main(void) { cout ...
- java 中整数类型的进制转换
int a=10; Integer.toBinaryString(a); //转换成2进制Integer.toOctalString(a); //转换成8进制Integer.toHexString( ...
- C++中char类型的十六进制字符串转换成字节流
如a[5]="1234"转换成a[5]={0x12,0x34} 代码如下: void HexStrToByte(const char* source, unsigned char* ...
- golang中值类型的嵌入式字段和指针类型的嵌入式字段
总结: 1. 值类型的嵌入式字段,该类型拥有值类型的方法集,没有值指针类型的方法集 2. 指针类型的嵌入式字段,该类型拥有值指针类型的方法集,没有值类型的方法集,并且,该类型的指针类型也有值指针类型的 ...
- golang中接口类型小案例
1. 在项目中实现注册成功之后,向用户发送邮件.微信提醒 package main import "fmt" type IMessage interface { send() b ...
- C不同变量类型存储大小引发的BUG
#include"stdio.h" typedef signed char int8; typedef unsigned char uint8; typedef signed sh ...
随机推荐
- 配置nutch
配置nutch (nutch文件夹已在/home目录下) 1. 修改系统环境变量 sudo gedit /etc/profile //增加 #set nutch export PATH=/home/n ...
- c# 写个简单的爬虫。注:就一个方法,没有注释,自己猜~哈哈
和我,在成都的街头走一走,哦~喔~哦~ public JsonResult GetHtml() { string url = "http://www.xxxxxxxxxxxxxxxxxx.c ...
- python函数不定长参数
def fun(a, b, *args): print(a) print(b) print(args) print("="*30) ret = a + b for i in arg ...
- [梁山好汉说IT] 边缘计算在梁山的应用
[梁山好汉说IT] 边缘计算在梁山的应用 0x00 摘要 梁山泊下四个酒店就是边缘计算在梁山的应用,以朱贵南山酒店为例能看出其"计算实时/省流量/具备智能"等各种优点. 0x01 ...
- 洛谷$P$3327 约数个数和 $[SDOI2015]$ 莫比乌斯反演
正解:莫比乌斯反演 解题报告: 传送门! 先考虑证明一个结论,$d_{i\cdot j}=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]$ 看起来就很对的样子,但还是证下趴$QwQ ...
- mysql主从同步--读写分离。
1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...
- 「洛谷P2891」[USACO07OPEN]吃饭Dining 解题报告
P2891 [USACO07OPEN]吃饭Dining 题目描述 Cows are such finicky eaters. Each cow has a preference for certain ...
- 小小知识点(三十五)MATLAB中如何更改所画Figure的图形比例
1. 打开一个figure,show plot tools and dock figure 2.选择图形的 more properties 3. 选择aspect ratio中的plotboxaspe ...
- 解决vs2017创建.net core失败以及不能登录问题
创建.net core web 提示值不能为空,开始以为是vs安装错误,重新安装了一遍也是这样,之前都好好的,然后登录也不行了(提示我们无法刷新此账号的凭据),百度了下,是ie不能上网的问题.解决了登 ...
- css部分概念
1.层叠 规则之间属性相同,值不同的时候就会发生声明冲突,这个时候层叠就会起作用了,层叠会将我们声明的不同的值进行保留,相同的值进行比较,选权重值更高的一个来运行.具体情境如下:假设我们定义了一个di ...