4 int float bool string UTF8 ASCII

本文详细介绍了Go语言中的基本数据类型,包括整型(int8, int16, int32, int64及其无符号类型)、浮点型(float32, float64)、布尔型和字符串型。特别指出,字符在Go中被视为整型,字符串本质上是字节切片,不可变。此外,还提到了不同类型在内存中的存储和大小。
摘要由CSDN通过智能技术生成

第三本【第三章】50-60页 基本数据类型 整型、浮点型、布尔型、字符串型

1、一个位(bit)是计算机最小的空间,存放0或1。常说的32位操作系统64位操作系统,其中的位就是这个位的意思。

2、一个字节(byte) == 8个位(bit)组成,根据各个位存放0或1(二进制)的不同排列组合,一个字节最大可表示2的8次方
等于256、也即0~256范围内的十进制数或对应的一个ASCII(扩展版)字符;如果用最左边位来表示正负号,则一个字节最大
可以表示-128~+127【不是+128是因为0这个十进制数算在内】范围内的任意十进制数,如果最左边位保持是0不予使用,则该字节
可表示0~+127范围内十进制数或对应的一个ASCII(最初版)字符

3、整型【默认零值为0】---------------------------------------
int8 ----- 代表8个位(bit)共1个字节(byte)的空间,由于带正负号,故表示 -128~+127范围内的数
int16 ----- 代表16个位(bit)共2个字节(byte)的空间,由于带正负号,故表示 -(2^15) ~ +(2^15-1) 范围内的十进制数
int32 ----- 代表32个位(bit)共4个字节(byte)的空间,由于带正负号,故表示 -(2^31) ~ +(2^31-1) 范围内的十进制数
rune 【<=>int32】代表32个位(bit)共4个字节(byte)的空间,由于带正负号,故表示 -(2^31) ~ +(2^31-1) 范围内的十进制数
int64 ----- 代表64个位(bit)共8个字节(byte)的空间,由于带正负号,故表示 -(2^63) ~ +(2^63-1) 范围内的十进制数
int ----- 根据电脑系统来定,如果是32为操作系统就代表int32,64为操作系统就代表int64,即默认系统的最大位数
但int类型是一个单独的数据类型并不等同于int32或int64

uint8 ----- 代表8个位(bit)共1个字节(byte)的空间,无符号,故最大可表示2^8-1=255 也即0~255范围内的十进制数
uint16 ----- 代表16个位(bit)共2个字节(byte)的空间,无符号,故最大可表示2^16-1=255 也即0~255范围内的十进制数
uint32 ----- 代表32个位(bit)共4个字节(byte)的空间,无符号,故最大可表示2^32-1=255 也即0~255范围内的十进制数
uint64 ----- 代表64个位(bit)共8个字节(byte)的空间,无符号,故最大可表示2^64-1=255 也即0~255范围内的十进制数
uint ----- 根据电脑系统来定,如果是32为操作系统就代表uint32,64为操作系统就代表uint64,即默认系统的最大位数
但uint类型是一个单独的数据类型并不等同于uint32或uint64

3.1、字符(专指单个字符,用1~4个字节的空间表示)------------------------------------
byte 【<=>uint8】 和uint8代表的空间一样 代表8个位(bit)共1个字节(byte)的空间,无符号,故最大可表示2^8-1=255 也
即可以表示0~255范围内的十进制数,或其对应的一个ASCII(扩展版)字符

字符型常量在书写时在左右加上单引号 如: a := ‘$’ b :=’\n’ c=‘7’

字符型在处理时系统默认以其对应的utf-8 Unicode十进制数(码值)运行,【utf-8 Unicode对照表 可以视作ASCII码表的扩大版】
例如直接输出一个字符,输出的是其对应的十进制数;
又例如字符可以和十进制数进行运算;
想要输出字符a原本的样子,需要用fmt.Printf("%c",a)来输出字符a原本作为字符的样子
当然也可以对一个整数a,用fmt.Printf("%c",a)来输出其对应的字符【前提是整数a在utf-8、unicode编码对照表
中的十进制数范围内,超出范围的太大的数字不行】

int int16 int32 int64 uint8 uint16 uint32 uint64
超过ASCII范围的字符,例如汉字等其他字符,需要用更大的字节空间【单个汉字至少需要两个字节来表示,字符串中的一个汉字是三个字节空间】来进行表示,
故可以申明为上一行的那些类型,再用单引号加以表示字符常量,表示其是一个字符类型。

总结:字符类型在系统层面,【借助ASCII码表、utf-8 unicode编码对照表】,仍是被当做整型(十进制数)对待的;
即数字是数字,字符还是数字,Golang中本质上没有专门的字符类型,字符类型被包含在整型里,字符和整型的底层都
是一或若干字节,都是0和1;字符和十进制数二者在ASCII码表、utf-8 unicode编码范围内是一一对应和几乎等价的

todo:申明一个变量的类型为 int64 ,就表示内存分配8个字节的空间作为一个整体,专门来表示该变量,即使空间有富余,也不会用
来去表示其他变量。int系列、float系列中其他同理
申明一个切片 sl := []rune{} 就表示切片里的每一个元素,内存都会分配4个字节专门用来表示该元素

todo: 可以用 unsafe包下的unsafe.Size()函数来求变量所占空间字节数

4、字符串型【默认零值为""空字符串】-----------------------------------------
一个字符由一个(或多个)字节表示,字符串由一串字符连接起来形成,
故字符串在底层是一串连接起来的若干字节【默认是[]byte,故逐个以下标输出会出现乱码,可以转为[]int32,就不会乱码】。

在Golang中,字符串的本质其实是[]byte切片,但不能直接当切片用,类型还是string。由于其本
质是切片,本身的类型又是string,因此可以和切片通过string和[]int32、[]byte进行类型互相转换,
[]int32(“我是一个字符串”) []rune(“我是字符串”)
string([]int32{23,46,57}) string([]int32{“hi大家好”})
string([]byte{97,229,140,151,98}) []byte(“大家好”)
【以上只能是int32或rune或[]byte,不能是其他int系列的,int64也不行】
该字符串可以像切片那样被截取、切割等,对字符串的截取,本质是对字符串作为一个[]byte切片对应的底层数组的截取,当字符串有汉字时,注意将字符串转为[]rune
但一个字符串一旦赋值完成,该字符串中的任意一个字符都不能再被单独更改。【第十一本209~
也可以和其他字符串用 + 加号连接

字符串常量须放在:
左右双引号中(识别双引号内的所有转义字符)
或者
左右反引号中(不会识别反引号内的任何转义字符,且按排版格式输出)【注意是反引号,不是单引号】

5、浮点型【默认零值为0】---------------------------------------
float32【占用4个字节】、float64【占用8个字节】
小数、也即浮点型数据全部带正负号
一个小数、也即浮点型数据在机器内存中需存放 符号位、指数位、尾数位 三部分
float32对小数位过多的小数会造成尾数丢失,也即精度损失,即溢出,故一般推荐用float64;
高精度类型强转为低精度类型也可能会出现精度损失,即溢出
开发中不指明类型的小数,系统默认是float64

6、布尔型【默认零值为false】---------------------------------------
只有两个值 true 和 false
一个布尔类型值占 1个字节

---------------------------------值类型&&引用类型–第四本69页---------------------------
值类型在内存的栈中,
引用类型在内存的堆中,如果没有变量使用该地址,该地址对应的数据空间就会成为垃圾并被GC回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值