当前位置: 首页 > news >正文

4、做中学 | 二年级下期 Golang整型和浮点型

上篇介绍了哪些数据类型,如何进行声明常量和变量,那么接下来进行详细学习下各个数据类型的使用!

一、整数

在go中,整数分为俩类,一个是无符号整数,即0以上数值;另一个是有符号数值,有正有负!

1. 有符号整数

类别类型描述零值示例取值范围
有符号整数int平台相关有符号整数(32位系统=32位,64位系统=64位)042, -1032位系统:-2³¹ ~ 2³¹-1
64位系统:-2⁶³ ~ 2⁶³-1
int88位有符号整数0127, -128-128 ~ 127
int1616位有符号整数032767, -32768-32768 ~ 32767
int3232位有符号整数(别名 rune02147483647-2147483648 ~ 2147483647
int6464位有符号整数09223372036854775807

看着都差不多,但是发现后边携带了8、16、32、64。
这些数值代表什么意思呢?
根据描述,可以发现是8位有符号、16位有符号… 什么意思呢?

大白话说一下这里
在这里插入图片描述
比如int8,这里的8代表在内存中占据8位(1字节),其中最前边的一位位符号位,代表正和负,剩下7位表式数值大小。所以对于负数,采用补码表示,其能表示的范围可以通过计算得出为 -2^7 到 2^7 - 1,即 -128 到 127。

	// 整数var a int8 = 10fmt.Println("a=", a)var b int8 = 128fmt.Println("b=", b)

在这里插入图片描述
可以看到int8内存放不下128的数值,原理如上所述!!!

剩下的int 结尾的16、32、64数值,同理即可得出!

练习代码

	// 整数var a int8 = 10fmt.Println("a=", a)//var b int8 = 128 // 错误 int8内存放不下128的二进制数//fmt.Println("b=", b)// int16var c int16 = 128fmt.Println("c=", c)// int32var d int32 = -521fmt.Println("d=", d)// int64var e int64 = 521fmt.Println("e=", e)// int// 操作系统为32位,int为32位  即: int32// 操作系统为64位,int为64位  即: int64var f int = 521fmt.Println("f=", f)

2. 无符号位

类别类型描述零值示例取值范围
无符号整数uint平台相关无符号整数(大小同 int010032位系统:0 ~ 2³²-1
64位系统:0 ~ 2⁶⁴-1
uint88位无符号整数(别名 byte0255, 0x0A0 ~ 255
uint1616位无符号整数0655350 ~ 65535
uint3232位无符号整数042949672950 ~ 4294967295
uint6464位无符号整数0184467440737095516150 ~ 18446744073709551615
uintptr无符号整数,用于存储指针地址0系统内存地址足够存储指针值的整数

有了上边的知识后,我们再来验证下
在这里插入图片描述
用uint8为例,8位都是数值位,没有符号,也就是说没有负数!算一下能表示的范围可以通过计算得出为0到 2^8 - 1,即0 ~ 255。
在这里插入图片描述
在这里插入图片描述
练习代码

// 无符号整数// uint8//var g uint8 = -1//var g uint8 = 256var g uint8 = 255fmt.Println("g=", g)// uint16var h uint16 = 521fmt.Println("h=", h)// uint32var i uint32 = 521fmt.Println("i=", i)// uint64var j uint64 = 521fmt.Println("j=", j)// uint 和int类似// 操作系统为32位,int为32位  即: int32// 操作系统为64位,int为64位  即: int64var k uint = 521fmt.Println("k=", k)

二、浮点型

浮点型分为了单精度float32和float64,这俩个都是有符号位的。

比如:float32类型,二进制内存分布

 32位二进制 = 1 位用于符号位 + 8 位用于指数部分 + 剩下的 23 位用于尾数部分

32位内存分布如下图
在这里插入图片描述
浮点型最需要注意的是精度,而精度由尾数部分决定小数精度,23 位二进制数对应的十进制有效数字位数大约在 6 - 7 位左右。能比较准确地表示到小数点后第 6 位或者第 7 位,但是从第 7 位或者第 8 位开始可能会出现误差。当你对多个 float32 数进行运算时,小数精度较低的缺点可能会更明显。

接下来我们看下float64二进制内存分布

 64位二进制 = 1 位用于符号位 + 11 位用于指数部分 + 剩下的 52 位用于尾数部分

52 位的尾数部分使得它可以表示更精确的小数。52位二进制转换为十进制后,它可以比较准确地表示到小数点后第 15 位或者第 16 位左右,在很多计算场景下能够提供足够的精度,尤其在科学计算、工程计算等领域,float64 凭借其较高的精度被广泛使用。

练习代码

	// 浮点型// float32var l float32 = 3.1415926535897932384626433832fmt.Println("l=", l)// l= 3.1415927// float64var m float64 = 3.1415926535897932384626433832fmt.Println("m=", m)//m= 3.141592653589793

本篇说明了整数(有符号整数、无符号整数),浮点型(小数),基本覆盖文化数值范围。

本次作业

  1. 熟练使用整型、浮点型进行声明和使用
  2. 有一个数值,可以进行合理分配对应的数据类型(比如:int8、int16等类型)
  3. 知道类型后边的数值含义和进行合理使用
  4. 知道浮点型数据构成(符号位 + 指数部分 + 尾数部分)
  5. 编程中需注意浮点型精度,避免造成精度问题,计算错误 (差以毫厘,失之千里)
http://www.lryc.cn/news/572706.html

相关文章:

  • react扩展
  • Excel批量计算时间差
  • 【笔记】解决部署国产AI Agent 开源项目 MiniMax-M1时 Hugging Face 模型下载缓存占满 C 盘问题:更改缓存位置全流程
  • ElSelect 多选远程搜索选项丢失问题
  • 甘肃安全员A证考试备考题库含答案2025年
  • WIFI原因造成ESP8266不断重启的解决办法
  • 【同声传译】RealtimeSTT:超低延迟语音转文字,支持唤醒词与中译英
  • npm 更新包名,本地导入
  • vue2通过leaflet实现图片点位回显功能
  • Fiddler抓包工具使用技巧:如何结合Charles和Wireshark提升开发调试效率
  • OpenCV C++ 边缘检测与图像分割
  • NY339NY341美光固态闪存NW841NW843
  • 【VUE】某时间某空间占用情况效果展示,vue2+element ui实现。场景:会议室占用、教室占用等。
  • PVE使用ubuntu-cloud-24.img创建虚拟机并制作模板
  • NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术
  • 旋转图像C++
  • json.Unmarshal精度丢失问题分析
  • vue3组件式开发示例
  • 大模型与搜索引擎的技术博弈及未来智能范式演进
  • MySQL查询语句的通配符*
  • 组态王工程运行时间显示
  • 【案例拆解】米客方德 SD NAND 在车联网中(有方模块)的应用:破解传统 TF 卡振动脱落与寿命短板
  • 在VTK中捕捉体绘制图像进阶(同步操作)
  • 零基础入门PCB设计 一实践项目篇 第三章(STM32开发板原理图设计)
  • 云计算处理器选哪款?性能与能效的平衡艺术
  • 【网络安全】文件上传型XSS攻击解析
  • 特征金字塔在Vision Transformer中的创新应用:原理、优势与实现分析
  • AS32系列MCU芯片I2C模块性能解析与调试
  • 408第二季 - 组成原理 - 流水线
  • Linux之线程同步与互斥