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

C-数据的存储

里面详细介绍了整型跟浮点型的存储,看完认可的话,可否一键三连呢!

数据类型介绍

我们大致分为2类:整型与浮点型

整型:int,char,short,long,long long

浮点型:float(单精度浮点型),double(双精度浮点型)

补充一点,我之前一直在犯错的地方:

float类型的输入(scanf)用“%f”,打印用“%lf”或者“%f”

double类型的输入(scanf)用“%lf”,打印用“%lf”或者“%f”

问:为什么要这么多数据类型?

为了开辟不同的内存空间大小,可以精确控制存在这些空间中的数据

整型在内存中的存储

一个数据它有原码、补码、反码,我们通常操作的是它的补码,存在内存中的也是它的补码

接下来介绍一下怎么实现3者之间的转换:(正数的反码补码是本身,不会改变,负数则要遵循以下原则,且符号位不变(最左边的第一位)

 我们举个例子:(a是整型,占4个字节=8个比特位,因此存到a中的只有8个有效数字)

 下面我们看负数的:(为了效率,我们就只写前和后的8个比特位)

 我们可以验证(每4个二进制位等于1个16进制位)例如:

注意:每4位二进制位转化为一位16进制位 

问:为什么要用整型补码进行计算 ?

答:用补码可以将符号位和数值统一处理,避免了正负数符号不同产生影响

我们看个例子:

下面我们仔细演示一遍:(注意都是对补码进行操作啊)

 大小端的介绍

其实就是大端存储和小端存储

如果高字节位存储到低地址位,就是大端存储(逆序),否则就是小端存储(顺序)

我们画个图理解:

如何判断当前编译器版本是小端存储还是大端存储?

 我们可以写一个代码,看它的内存存储

我们可以看到,在内存中a的存储是f6 ff ff ff

刚好与我们换算的16进制相反,所以我们判断是大端存储

因此,我们可以这么记:顺序为小端,逆序为大端

浮点型在内存中的存储

浮点数的存储与我们的整型存储截然不同,首先我们先看一个公式:

V=(-1)^S * M * 2^E

我们演示以下,帮助理解:

解析:我们拿左边为例

首先5.5是一个浮点数,先转化小数点左边为2进制,再把右边也换成2进制(小数点右边第一位是乘2的负一次方,小数点右边第二位是乘2的付二次方,以此类推),然后再移动小数点进行变换

下面我们重点讲变化规律:

V= (-1)^S * M * 2^E

(-1)^S”是符号位,S=0时,V为正数;S=1时,V为负数;

M”是有效数字,范围是1<=M<=2,(在上面的移动小数点就是要移动到M满足这个条件为止)

2^E” 是指数位,2代表2进制,E代表移动位数(左移是正号,右移是负号)

了解完之后,我们再正式进入浮点数的存储:


明天补充哈,太困了!


http://www.mrgr.cn/news/80493.html

相关文章:

  • android opencv导入进行编译
  • Vue3期末复习
  • MySQL中Json字段
  • MySQL数据库sql教程-从入门到进阶
  • 【Linux】结构化命令:if-then语句
  • 基于python绘制数据表(下)
  • 一、基于langchain使用Qwen搭建金融RAG问答机器人--技术准备
  • samout llm解码 幻觉更低更稳定
  • Rk3588 FFmpeg 拉流 RTSP, 硬解码转RGB
  • Android显示系统(13)- 向SurfaceFlinger提交Buffer
  • 从上千份大厂面经呕心沥血整理:大厂高频手撕面试题(数据结构篇 ,Java实现亲试可跑)
  • FFmpeg第一话:FFmpeg 简介与环境搭建
  • YOLOv8目标检测(三*)_最佳超参数训练
  • PHPstudy中的数据库启动不了
  • 计网_虚拟局域网VLAN
  • C++对象数组对象指针对象指针数组
  • labelimg使用指南
  • Python-基于Pygame的小游戏(天空之战)(一)
  • ansible自动化运维(五)roles角色管理
  • YOLOv8目标检测(四)_图片推理