数据存储(跑路人学习笔记)

简介: 数据存储(跑路人学习笔记)

前言

最近要考试,咱就少写博客了。(虽然已经断更了很长一段时间了,嘿嘿)话不多讲。

开始!!!


一、整数存储方式(引入大小端)

我们都知道我们的cpu因为只有加法处理器,因此当处理负数是就必须要使用一些手段,也就是我们的原、反、补码。

稍微讲一下正数我们的原码、反码、补码相同,但,负数原反补需要运算

如-2:

原:10000000000000000000000000000010

反:1111111111111111111111111111111111101

补:1111111111111111111111111111111111110

下图为编译器里存储的-2。(在显示时为16进制每一行为一个字节,int 为四个字节所以就截了四行)

image.png

OK,我们知道了整形的存储方式了但是我们又不禁会想为啥他地址从低到高的时候是feffffff而不是fffffffe呢?

此时我们就可以引出大小端储存


二、大小端储存

首先我们要知道大小端储存是跟编译器不同而不同

OK,我们先将大端小端的书面意思告诉大家

大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。

小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

我们用int a = 0x11223344来演示

(地址是我从VS2019现扣出来的)

(VS2019为小端存储)

image.png


我们在编译器将它用四列为一行时

image.png

我们在定义变量时将44放在了最低位数上(类似个位十位百位那种我们将个位称为数据的低位然后大小端的存储我们就类比思想就很容易想明白了)我们就称44为数据的低位我们将44放在了低地址处这也就符合了小端储存的低位放在低地址处。

当然如果不想理解就直接大放大 小放小为小端存储就好了。大端就相反


浮点数的存储

例子

先来个例子勾一下好奇心,嘿嘿 。


image.png

同为4个字节的关键字因为存储读取的不同在同一个数字就会有巨大的区别。

下面我们来对浮点型的存储方式进行讲解


浮点型存储读取方式

以5.5为例,十进制的5.5转化成二进制位101.1

而在存储二进制的时候我们将二进制利用科学计数法将101.1变成1.011*22 而当负数存储时我们就会在前面加一个-1

所以我们的浮点型在存储时就根据IEEE 754的规定将十进制的数字拆成二进制并写成下面的形势

(-1)S ×M × 2E

S为0时为正数为1时为负数

M的数值1<=M<2

E为指数位

(其实和十进制的科学计数法几乎一样)

(下图为float(四字节)类型在编译器的存储方式)


下图为double(八字节)类型存储方式

image.png

image.png

下面我以float(四字节)为例进行讲解 :

我们除了对E、M、S进行数值上的要求还进行了其他优化之类

如:

对M:

因为M的值在1<=M<2及1.xxxxxx所以我们在存储时干脆不对1进行存储而对0.xxxxx存储到M的位置中这样我们对M存储精度就会再次增加。

对E:

对E情况比较复杂首先我们要知道在存储E时我们是按照unsigned的标准进行存储及E没有负数形式但我们在用科学计数法时我们的指数位是有负数情况的所以我们就规定再存储时我们要先对E加上127(四字节时)然后再进行存储。

在E不全为1或0时:

在E存储的数据不全为零或一时我们要想使用E的数值我们就先对其减去127就可以正常使用我们也得到了指数位的负数情况

当E全为零时:

我们知道在存储时我们的E已经先加上了127但是依旧在存储时为全为零我们就可知我们得到的数及其小,这是我们就将M直接用为0.xxxx也就直接将该值看做0

当E全为1时:

这是有效数字M全为0直接将该数定义成无穷。

这时我们就可以解释前面的例题了:

我们在存储a时为0x0000000a而当他存储到浮点型时我们不难发现s=0(一个bit);E=0(8个bit);我们E全为0时我们的浮点型也就为0。下面思路类似。


结束废话

本章主要对底层逻辑知识进行了一次进阶提升。有点难理解大家可以找部分视频一起理解。

再见ヾ( ̄▽ ̄)ByeBye


相关文章
|
JavaScript 测试技术 Python
低成本、快速造测试数据,这个造数工具我后悔推荐晚了!
没有测试数据,所谓的功能测试和性能测试全都是无米之炊。但我发现一个蛮诡异的事情,就是行业内很少会有人去强调测试数据的重要性,甚至市面上都没有人在做测试数据这门生意。
低成本、快速造测试数据,这个造数工具我后悔推荐晚了!
极态云中 2 行代码搞定流水账中的期初期末计算!
今天咱们就来聊聊如何用极态云这个神器来解决期初期末的计算!极态云 JIT 真的太强大了,只有你想不到,没有它做不到的。
|
10天前
|
消息中间件 数据采集 运维
一份运维监控的终极秘籍!监控不到位,宕机两行泪
【10月更文挑战第25天】监控指标的采集分为基础监控和业务监控。基础监控涉及CPU、内存、磁盘等硬件和网络信息,而业务监控则关注服务运行状态。常见的监控数据采集方法包括日志、JMX、REST、OpenMetrics等。Google SRE提出的四个黄金指标——错误、延迟、流量和饱和度,为监控提供了重要指导。错误监控关注系统和业务错误;延迟监控关注服务响应时间;流量监控关注系统和服务的访问量;饱和度监控关注服务利用率。这些指标有助于及时发现和定位故障。
47 1
|
3月前
|
关系型数据库 MySQL 大数据
DataX:数据同步的超音速英雄!阿里开源工具带你飞越数据传输的银河系,告别等待和故障的恐惧!快来见证这一数据工程的奇迹!
【8月更文挑战第13天】DataX是由阿里巴巴开源的一款专为大规模数据同步设计的工具,在数据工程领域展现强大竞争力。它采用插件化架构,支持多种数据源间的高效迁移。相较于Apache Sqoop和Flume,DataX通过并发写入和流处理实现了高性能同步,并简化了配置流程。DataX还支持故障恢复,能够在同步中断后继续执行,节省时间和资源。这些特性使其成为构建高效可靠数据同步方案的理想选择。
273 2
|
3月前
|
存储 分布式计算 大数据
大数据处理竟然这么简单?学会这几招,你也能在数据洪流中游刃有余,秒变数据大师!
【8月更文挑战第6天】面对海量数据,有效处理成为关键。本文介绍大规模数据处理的核心挑战及解决方案,涵盖分布式存储(如HDFS)和计算(如Spark)。通过示例代码展示HDFS文件读写及Spark数据处理流程。此外,还强调了数据质量、安全及合理资源配置的重要性,助您在数据海洋中洞察先机。
71 1
|
3月前
|
存储 SQL 分布式计算
揭秘Delta Lake:如何以史诗级时间旅行能力,驾驭数据表的无限版本,让数据科学家直呼过瘾!
【8月更文挑战第27天】Delta Lake是一种开源的大数据存储层,它通过事务日志与快照机制管理表格的多版本,支持数据的时间旅行功能。其核心是维护一个详细的事务日志记录所有表操作,并通过快照保存特定时间点的表状态。用户可通过指定时间戳或版本号查询历史版本数据,系统默认保留30天的历史记录并支持自定义设置。借助Delta Lake,数据团队能高效地处理数据变更和审计需求。
45 0
|
3月前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
713 0
|
6月前
|
SQL 关系型数据库 MySQL
“时光机”与“多维视界”⭐️MySQL中原子性与隔离性的科幻大片
“时光机”与“多维视界”⭐️MySQL中原子性与隔离性的科幻大片
|
6月前
|
编解码 安全 定位技术
典型崩溃问题集锦
典型崩溃问题集锦
50 0
数据在内存中的存储(超级无敌究极详细!)
数据在内存中的存储(超级无敌究极详细!)