首页 > 系统相关 >数据在内存中的存储

数据在内存中的存储

时间:2024-11-20 12:14:01浏览次数:3  
标签:小端 存储 字节 有效数字 浮点数 内存 数据

一、整数在内存中的存储

        详见我的另一篇博客:

https://blog.csdn.net/2401_86861045/article/details/143535504?spm=1001.2014.3001.5502

二、大小端字节序

1、什么是大小端?

        0x11223344   这里的11就是高位字节,44就是低位字节。高、低位字节是相对的。

按照不同的存储顺序,我们分为大端字节序存储小端字节序存储,下面是具体的概念:

大端(存储)模式
是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处

小端(存储)模式
是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处

2、为什么会有大小端模式之分?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8 bit 位,但是在 C 语言中除了 8 bit 的 char 之外,还有 16 bit 的 short 型,32 bit 的 long 型(要看具体的编译器)。另外,对于位数大于 8 位的处理器,例如 16 位或者 32 位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式的出现。

我们常用的 X86 结构是小端模式,而 KEIL C51 则为大端模式。很多的 ARM,DSP 都为小端模式。有些 ARM 处理器还可以由硬件来选择是大端模式还是小端模式。

三、浮点数在内存中的存储

浮点数家族包括:floatdoublelong double 类型。浮点数表示的范围在头文件float.h 中被定义。

根据国际标准 IEEE(电气和电子工程协会)754,任意一个二进制浮点数 V 可以表示成下面的形式:V = (-1)^S * M * 2^E

(-1)^S 表示符号位,当 S=0,V 为正数;当 S=1,V 为负数

M 表示有效数字,M 是大于等于 1,小于 2 的;

2^E 表示指数位

现在举个例子来帮助理解:十进制的 5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。那么,按照上面V的格式,可以得出S=0,M=1.01,E=2。

IEEE 754 规定:
对于 32 位的浮点数 (float),最高的 1 位存储符号位 S,接着的 8 位存储指数 E,剩下的 23 位存储有效数字 M
对于 64 位的浮点数 (double),最高的 1 位存储符号位 S,接着的 11 位存储指数 E,剩下的 52 位存储有效数字 M

1、浮点数存的过程

        前面说过,1≤M<2,也就是说,M 可以写成 1.xxxxxx 的形式,其中 xxxxxx 表示小数部分。
IEEE 754 规定,在计算机内部保存 M 时,默认这个数的第一位总是 1,因此可以被舍去,只保存后面的 xxxxxx 部分。比如保存 1.01 的时候,只保存 01,等到读取的时候,再把第一位的 1 加上去。这样做的目的,是节省 1 位有效数字。以 32 位浮点数为例,留给 M 只有 23 位,将第一位的 1 舍去以后,等于可以保存 24 位有效数字。

        E 为一个无符号整数(unsigned int)这就意味着,如果 E 为 8 位,它的取值范围为 0~255;如果 E 为 11 位,它的取值范围为 0~2047。但是,我们知道,科学计数法中的 E 是可以出现负数的,所以 IEEE 754 规定,存入内存时 E 的真实值必须再加上一个中间数,对于 8 位的 E,这个中间数是 127;对于 11 位的 E,这个中间数是 1023。比如,2^10 的 E 是 10,所以保存成 32 位浮点数时,必须保存成 10+127=137,即 10001001。

2、浮点数取的过程

指数E从内存中取出分成三种情况:

(1)E 不全为 0 或不全为 1(常规情况)

这时,浮点数就采用下面的规则表示,即指数 E 的计算值减去 127(或 1023),得到真实值,再将有效数字 M 前加上第一位的 1

(2)E 全为 0

这时,浮点数的指数 E 等于 1-127(或者 1-1023),得到真实值,有效数字 M 不再加上第一位的 1,而是还原为 0.xxxxxxx 的小数。这样做是为了表示 ±0,以及接近于 0 的很小的数字

(3)E 全为 1

这时,如果有效数字 M 全为 0,表示 ± 无穷大(正负取决于符号位 S)

标签:小端,存储,字节,有效数字,浮点数,内存,数据
From: https://blog.csdn.net/2401_86861045/article/details/143907185

相关文章

  • (2024最新毕设合集)基于SpringBoot的校园共享厨房信息系统-72647|可做计算机毕业设计JAV
    目 录摘要第一章 绪论1.1选题背景与意义1.2研究现状1.3论文结构与章节安排第二章系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用例分......
  • 新兴数据仓库设计与实践手册:从分层架构到实际应用(二)
    本手册将分为三部分发布,以帮助读者逐步深入理解数据仓库的设计与实践。第一部分介绍数据仓库的整体架构概述;第二部分深入讨论ETL在数仓中的应用理论,ODS层的具体实现与应用;第三部分将围绕DW数据仓库层、ADS层和数据仓库的整体趋势展开;通过这样的结构,您可以系统地学习每一层......
  • 数据中心交换机M-LAG组网故障场景,及流量走向分析?
    M-LAG作为一种跨设备链路聚合的技术,把链路可靠性从单板级提高到了设备级。如果出现故障(不管是链路故障、设备故障还是peer-link故障),M-LAG都能够保证正常的业务不受影响。1、上行链路故障:当M-LAG主设备的上行链路发生故障时,通过M-LAG主设备的流量会经过peer-link链路进行转发......
  • 如何用实时数据追踪来解决项目瓶颈?
    引言:你真的了解你的工作进展吗?在现代工作环境中,任务纷繁复杂,团队协作越来越依赖工具和流程。但我们却时常陷入这样一种困境:明明任务都分配好了,但最终却无法按时交付。每天的忙碌似乎没有结果,下一步的优先级模糊不清。管理者无法判断团队的节奏是超前、落后,还是原地踏步。这些......
  • 省市区三级联动数据
    mooon-district一个行政区数据工具,可以用来生成json格式数据、SQL插入语句、csv格式的数据和省市县三级行政区联动的Excel下拉选择模版。数据说明数据来源于民政部官网的公开数据,只支持三级行政区:省/自治区/直辖市、市/州/盟、区/县/县级市/旗,不支持到乡镇和街道这一级行......
  • 银河麒麟V10安装达梦数据库DM8
      1.系统准备查看系统信息:cat/proc/version查看CPU:lscpu或cat/proc/cpuinfo查看内存:free-m查看磁盘空间:cat/proc/meminfo或df-h查看tmp空间(至少1.5G以上):df-h/tmp发现tmp空间太小(安装DM8需要至少800M的临时空间),增加tmp空间大小:mount-oremount,size=2G/tmp......
  • SpringBoot养老院管理系统04077 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,员工,老人信息,接待信息,床位信息,床位安排,外出信息,转房信息,退房信息,货品分类,货品信息,入库信息,出库信息,员工工资开题报告内容一、项目背......
  • 工作节奏总被打乱?如何用数据让任务变得清晰可控?
    在现代工作环境中,每天被无数的任务、会议、突发事件环绕,我们经常会有一种感觉——越努力,越混乱。任务完成的比例和效率不仅让个人焦虑,也直接影响团队和项目的成败。那么问题来了:如何看清任务进展、明确团队节奏、优化时间分配?解决这一切的关键,其实在于科学的数据追踪与分析。任务......
  • 数据库计算机三级等级考试–数据库技术
    https://blog.csdn.net/qq_45922256/article/details/132917883计算机三级等级考试笔记,是博主通过计算机三级数据库技术考试的相关笔记,此篇博客,不仅适合需要考计算机三级考试的各位考生,也适合在职场处理关于数据库的部分操作,个人认为算是一篇使用性比较强的文档,我个人认为,我目前......
  • jvm堆外内存
    jvm的内存包含堆内存和堆外内存,所谓堆内存就是我们平常用-xms和-xmx控制的内存,而堆外内存分为几部分:元空间大小:元空间是用于存储类的元数据信息的区域,在JDK8之后替代了永久代。可以通过-XX:MetaspaceSize和-XX:MaxMetaspaceSize来设置初始大小和最大大小。例如:-XX:MetaspaceS......