【C语言】数据在内存中的存储(包含大小端字节序问题)~

一、前言

  • 我们在刚开始学习C语言的时候,就接触到了很多数据的不同类型
  • 我们也知道,数据是存储在一块内存空间的,且我们只知道数据的类型决定着,该数据在内存中所占内存空间的大小,
  • 且超过一个字节的数据在内存中存储的时候,就有(以字节为单位)存储顺序的问题。
  • 可我们更应该知道,数据不仅仅只是存储到指定的空间就完事了,而是不同类型的数据有它相对应的存储原则的。
  • 这篇文章就是讲解不同类型的数据是在内容中的存储方式+大小端字节序
  • (本篇文章只对整型家族与浮点型家族对其在内存中的布局进行详解)待更~

二、整型数据在内存的存储

1.如何存储整型数据?
  • 整数的二进制表示形式有三种:原码(整数数据按照二进制的转换后,得到的就是原码)、反码、补码。
  • 而整数在内存中是以补码的形式存储的。
  • 这三种表示形式都有符号位与数值位,符号位用‘1’表示负,用‘0’表示正,而符号位是数值位的最高一位作为符号位
  • 若整数类型是无符号整型,则会把最高位也看成数值位,而把数据默认为正数。且它的反码与补码都等于原码
  • 当是有符号的整数时,整数为正时,原码、反码、补码相同。为负的时候,则需要按照下面的运算法则得到补码。
  • 原码(整数数据按照二进制的转换后,得到的就是原码);反码(原码,保持符号位不变,其余位按位取反(~)得到反码);补码(反码 + 1得到补码)。
  • 补:补码按照同样的运算法则,可以得到原码。
2.补码的意义是什么?
  • 补码可以让在内存中存储的整数数据,符号位与数值位统一处理。
  • CPU只有加法器,无论进行加法还是减法,两数补码直接相加即可
  • 原码转换为补码;补码转换原码,运算法则相同。(符号位不变,数值位按位取反,后+1)
3.如何读取整型数据?
  • 整型数据的读取较为简单,怎么存的怎么读出来就行
  • 首先,判断该数据类型是否是整型类型
  • 其次,判断该整数是signed的整型类型还是unsigned整型类型
  • 若为,若为signed的整型类型,且存的整数是负数,需紧记原反补的转换!!!

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

1.如何存储浮点型数据(伏笔)
  • (-1)^S  *  M  *  2^E  
  • 任何一个二进制的浮点型数据,都可以用上面的科学计数法表达式来表示;
  • S:用于决定该浮点型数据的正负号,S=0时,数据的正负性为正,S=1时,数据的正负性为负。
  • M:是一个>1 且 <2的有效数字(我们联想到十进制的科学计数法的有效数字也就能理解到这点)。
  • E:是一个指数
  • S M E在内存中的布局(下面的的讲解都将以float类型展开,也就是4字节的)
2.如何存储浮点型数据(开始)
  • 上面只是介绍了一些有关存储浮点型数据的相关的概念,可这些不足以让我们深入理解到浮点型到底在内存中是如何存储的。
  • 存储S数据:
  • 很简单,数据是正的,S位上就是0,反之,位1。
  • 存储M数据:
  • 因为我们都知道M都是一个>1 且 <2的有效数字;
  • 为了能让内存得到更高效的利用,在M中的数据存储到内存的时候,都会将M小数点前面的1省去,只保留小数部分。
  • 而等我们读取数据的时候,会将M的1再补上去,这样就更高效的利用了一个比特位。
  • 存储E数据:
  • E是一个无符号整型数据,可是浮点型数据是有正负性之分的,那如何去解决这一难题呢?
  • 我们在存储E的数据的时候会加上一个中间值,进行转换,存储到内存中。
  • 读取的时候,也会把得到的数据减去这个中间值。
  • 中间值是什么?
  • 用8比特位存储E数据的时候,其中间值是127(255/2)
  • 用11比特位存储E数据的时候,其中间值是1023(2047/2)
  • 这里我将举两个例子
3.如何读取浮点型数据(结尾)
  • 只要理解了如何存储浮点型数据,那读取数据就迎刃而解(怎么走的,就怎么回来),但是也有一些特殊的地方,比如对E数据的读取。
  • 存储E数据的比特位全为0的时候:(这是一个无限小的数字)
  • 这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还原为0.xxxxxx的⼩数。这样做是为了表⽰±0,以及接近于0的很⼩的数字
  • 存储E数据的比特位全为1的时候:(这是一个无限大的数字)
  • 这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s);
  • E不全为0或不全为1
  • 怎么存E的数据,就怎么读取就行。

四、大小端字节序

1.概念的引出
2.大小端字节序的概念
  • 小端字节序存储:
  • 高位的数据存储的高地址处;低位的数据存储到低地址处
  • 大端字节序存储:
  • 高位的数据存储的低地址处;低位的数据存储到高地址处
3.如何判断当前机器的字节序是哪种类型
  • 不同平台的是大端字节序的存储,还是小端字节序存储是不一样的,我们能做的就是通过一定的手段获得机器是大端字节序存储,还是小端字节序存储。
  • 指针求解:
  • 联合体求解:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP --- 上

目录 1. HTTP协议 2. 认识URL 2.1. URL中的四个主要字段 2.2. URL Encode && URL Decode 3. HTTP 协议格式 3.1. 快速构建 HTTP 请求和响应的报文格式 3.1.1. HTTP 请求格式 3.1.2. HTTP 响应格式 3.1.3. 关于 HTTP 请求 && 响应的宏观理解 3.2. 实现…

SOPHON算能服务器SDK环境配置和相关库安装

目录 1 SDK大包下载 2 安装libsophon 2.1 安装依赖 1.2 安装libsophon 2 安装 sophon-mw 参考文献: 1 SDK大包下载 首先需要根据之前的博客,下载SDK大包:SOPHON算能科技新版SDK环境配置以及C demo使用过程_sophon sdk yolo-CSDN博客 …

计算机三级——网络技术(综合题第四题)

综合题第四题考点总结: 1.DSN域名解析 2.ICMP控制报文协议 3.TCP三次握手 4.HTTP超文本传输协议 5.FTP文件传输协议 DNS域名解析 域名系统(英文:Domain Name system,缩写:DNS)是互联网的一项服务。它作为将…

数据中台:如何构建企业核心竞争力_光点科技

在当今信息化快速发展的商业环境下,“数据中台”已经成为构建企业核心竞争力的关键步骤。数据中台不仅是数据集成与管理的平台,更是企业智能化转型的加速器。本文将深入探讨数据中台的定义、特点、构建方法及其在企业中的作用。 数据中台的定义 数据中台…

8-深度学习

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)深度学习 (二)Tensorflo…

嵌入式Linux内核启动过程详解(第二阶段:C语言部分)

目录 概述 1 启动内核第二阶段流程图 2 嵌入式Linux内核启动分析(C语言部分) 2.1 start_kernel()函数 2.2 rest_init()函数 2.3 kernel_init()函数 2.4 kernel_init_freeable()函数 概述 本文主要介绍linux内核启动(内核版本&#xff…

FPGA学习_时序分析

文章目录 前言一、组合逻辑与时序逻辑二、建立时间和保持时间三、建立时间和保持时间 前言 心中有电路,下笔自然神!!! 一、组合逻辑与时序逻辑 组合逻辑:没有时钟控制的数字电路,代码里的判断逻辑都是组…

先进电机技术 —— 何为轴电压?

一、特定场景举例 长线驱动指的是在电动机与变频器之间存在较长的连接电缆,尤其是在大型工业应用中,电机可能远离变频器几十米甚至上百米。这种情况下,变频器通过长线向电动机传输功率时,可能会加剧电机轴电压和轴电流的产生&…

《明日边缘2》AI制作电影宣传片

《明日边缘2》AI制作电影宣传片 In the dawn of a new war, the cycle of death and rebirth begins. 在新战争的曙光中,生死轮回的循环悄然开启。 Each repetition brings a new horror, but also a chance for redemption. 每一次循环都带来新的恐怖,却…

第六十二回 宋江兵打大名城 关胜议取梁山泊-飞桨ONNX推理部署初探

石秀和卢俊义在城内走投无路,又被抓住。梁中书把他两个人押入死牢。蔡福把他俩关在一处,好酒好菜照顾着,没让两人吃苦。 第二天就接到城外梁山泊的帖子,说大军已经来到,要替天行道,让他放人,并…

jupyter notebook使用教程

首先是打开jupyter notebook 下载安装好之后,直接在命令行中输入‘jupyter notebook’即可跳转到对应页面 还可以进入想要打开的文件夹,然后再文件夹中打开中断,执行‘jupyter notebook’命令,就能够打开对应文件界面的jupyter …

2024年超声波清洗机品牌哪家好?实力担当超声波清洗机大集合

随着佩戴眼镜人群越来越多,眼镜清洗的需求也是越来越大了!也许有人佩戴了十几年眼镜都不知道超声波清洗机是要清洗的,也许有人一开始就注重眼镜的清洗。其实眼镜清洗是一件很简单的事情,可以用超声波清洗机来清洗眼镜。目前超声波…

短视频矩阵系统---php7.40版本升级自研

短视频矩阵系统---php7.40版本升级自研 1.部署及搭建 相对于其他系统,该系统得开发及部署难度主要在各平台官方应用权限的申请上,据小编了解,目前抖音短视频平台部分权限内侧名额已满,巧妇难为无米之炊,在做相关程序…

在SAP S4 OP中使用SAP API Hub 的API

参考资料:https://blog.51cto.com/u_11984354/4907646 NO.21-SAP S4 HANA Cloud API接口测试(1)-CSDN博客

基于springboot的“漫画之家”系统

目录 背景 技术简介 系统简介 界面浏览 背景 随着科技的不断进步,计算机已经变成了人们日常生活和工作不可或缺的工具。在这样的环境下,互联网技术被广泛运用于各个领域,以提升工作和生活的效率,推动了网络信息技术的迅猛发展…

Java多线程实战-CompletableFuture异步编程优化查询接口响应速度

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️本系列源码仓库:多线程并发编程学习的多个代码片段(github) 🏷️个人学习笔记,若有缺误,欢迎评论区指正…

C语言——程序拷贝文件

问题如下: 写一个程序拷贝文件: 使用所学文件操作,在当前目录下放一个文件data.txt,写一个程序,将data.txt文件拷贝一份,生成data_copy.txt文件。 基本思路: 打开文件data.txt,读…

SG5032VAN差分晶振X1G004261001100专用于5G通讯设备

差分晶体振荡器(DXO)是目前行业中公认高技术,高要求的一款晶体振荡器,是指输出差分信号使用2种相位彼此完全相反的信号,从而消除了共模噪声,并产生一个更高性能的系统。差分晶振一般为六脚贴片晶振,输出类型分为好几种,LVDS,LV-PE…

力扣面试150 阶乘后的零 数论 找规律 质因数

Problem: 172. 阶乘后的零 思路 👨‍🏫 大佬神解 一个数末尾有多少个 0 ,取决于这个数 有多少个因子 10而 10 可以分解出质因子 2 和 5而在阶乘种,2 的倍数会比 5 的倍数多,换而言之,每一个 5 都会找到一…

Linux初学(八)磁盘管理

一、磁盘管理 1.1 简介 磁盘的工作原理: 添加磁盘对磁盘进行分区格式化磁盘挂载和使用磁盘 磁盘的类型: 固态机械 磁盘的接口类型: IDESTSTSCSI 磁盘工作的原理: 磁盘,特别是硬盘,和内存不同,…