当前位置: 首页 > 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.lqws.cn/news/448057.html

相关文章:

  • 高并发网络通信Netty之空轮询问题
  • 【LUT技术专题】采样间隔自适应3DLUT-AdaInt
  • STM32 HAL 初始化I2C启动DS1307
  • 第1章: 伯努利模型的极大似然估计与贝叶斯估计
  • apisix-使用hmac-auth插件进行接口签名身份验证\apisix consumer
  • 机构运动分析系统开发(Python实现)
  • 工程师生活:清除电热水壶(锅)水垢方法
  • 前端HTML学习笔记
  • 《思维力:高效的系统思维》
  • python画三维立体图
  • 【支持向量机】SVM线性可分支持向量机学习算法——硬间隔最大化支持向量机及例题详解
  • 打卡Day55
  • 【lenovo】LEGION 2020款跳过windows账号登录
  • 12.10 在主线程或子线程中更新 UI
  • 退出python解释器的四种方式
  • C#语言入门-task2 :C# 语言的基本语法结构
  • vue3 defineExpose的使用
  • 不同系统修改 Docker Desktop 存储路径(从C盘修改到D盘)
  • 解锁微服务潜能:深入浅出 Nacos
  • 蜻蜓Q系统的技术演进:从Laravel 6到Laravel 8的升级之路-优雅草卓伊凡
  • C# winform教程(二)----GroupBox
  • ROS学习之服务通信
  • 【AI编程】第3期,针对AI生成的改枪码列表创建对应的数据库表
  • AWS CloudFormation深度解析:构建现代云原生应用基础设施
  • SpringBoot扩展——发送邮件!
  • Spring MVC参数绑定终极手册:单多参对象集合JSON文件上传精讲
  • 网络编程及原理(五)
  • Kotlin 2.6 猜数小游戏
  • AI免费工具:promptpilot、今天学点啥、中英文翻译
  • WSL 安装使用和常用命令