18.(C进阶)数据在内存中的存储

简介: 18.(C进阶)数据在内存中的存储

整数在内存中的存储

整数二进制的表示方式有三种:原码 反码 补码

三种表示方式均有符号位和数值位两部分,符号位0为正

要区分正数和负数

正整数的原 反 补码都相同

负整数的三种表示方法各不相同

对于整型来说:数据存放内存中其实存放的是补码

原因:1.可以将符号位和数值域统一处理

           2.补码和原码可统一处理,互相转换,运算过程是相同的,不需要额外硬件电路

大小端字节序和字节序判断

可以发现:

1.  为了方便,显示的是16进制

2.倒着存的,为小端存储

大小端

字节在内存中存储时存在着存储顺序的问题,分为大端和小端存储模式

大端:低字节保存在高地址位置

小端:低字节保存在低地址位置

为什么有大小端之分呢?

原因:计算机系统以字节为单位,每个地址单元都对应一个字节,由于寄存器宽度大于一个字节,

          存在将多个字节安排的问题,我们常用的x86结构是小端模式,而KEIL C51为大端模式,

          有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

练习

//做题ing,会在周四之前,整理出一些好题补充~

浮点数在内存中的存储

说明了整数和浮点数在内存中的存储不一样

浮点数的存储

举例来说:

十进制的5.0,写成二进制是101.0,相当于1.01*2^2

S=0,M=1.01,E=2

0.1表示2^(-1)==0.5

关于M:

1<=M<2,也就是说M可以写成1.XXXXXX的形式,因为默认第一位总是1,因此可以被舍去,比如保存1.01时,只保存01,等到读取的时候,再把第一位的1加上去,这样就可以多保留1位有效数字了

关于E:

E是一个无符号整数

浮点数的取出

E的计算值-127/1023得到真实值,再将有效数字M前加上第一位的1

特殊情况

E全为0,+127还这么小,说明是一个接近于0的很小的数字

E全为1,+127,八位全为1,能表示的最大值为255,说明E为128,一个超级大的数

回到一开始,来思考一下这串代码的输出值

按照int整型储存

按照S E M 来判断浮点数,E为全0,说明是一个趋近于0的极小的数,所以输出0.000000

按照浮点数储存

(E要加上127的

正整型的补码就是原码,转化成十进制为1091567616

因为浮点数的储存是S E M型,不同的存储方式导致了读取时的不同

//都看到这里啦,留下一个赞再走叭


相关文章
|
21天前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
|
20天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
41 1
|
25天前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
27天前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
62 1
|
29天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
30天前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
36 2
|
1月前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
38 4
|
1月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
52 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
4月前
|
存储 分布式计算 Hadoop
HadoopCPU、内存、存储限制
【7月更文挑战第13天】
277 14
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
362 0