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型,不同的存储方式导致了读取时的不同

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


相关文章
|
1天前
|
存储 C语言
数据在内存中的储存
数据在内存中的储存
6 3
|
1天前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
10 2
|
4天前
|
存储
数据在内存中的存储(了解数据在内存中的存储规则,看这一篇就够了!)
数据在内存中的存储(了解数据在内存中的存储规则,看这一篇就够了!)
|
16小时前
|
存储 C语言
【C语言进阶篇】整数在内存的存储——原码、反码、补码
【C语言进阶篇】整数在内存的存储——原码、反码、补码
|
4天前
|
存储 C语言
C语言----数据在内存中的存储(2)
C语言----数据在内存中的存储
12 0
|
4天前
|
存储 C语言
C语言----数据在内存中的存储(1)
C语言----数据在内存中的存储
|
9天前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之 从Kafka读取数据,并与两个仅在任务启动时读取一次的维度表进行内连接(inner join)时,如果没有匹配到的数据会被直接丢弃还是会被存储在内存中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5天前
|
存储
数据在内存中的存储(2)
数据在内存中的存储(2)
21 5
|
5天前
|
存储 小程序 编译器
数据在内存中的存储(1)
数据在内存中的存储(1)
23 5
|
6天前
|
存储 安全 Java
SpringSecurity6从入门到实战之初始用户如何存储到内存
Spring Security 在 SpringBoot 应用中默认使用 `UserDetailsServiceAutoConfiguration` 类将用户信息存储到内存中。当classpath有`AuthenticationManager`、存在`ObjectPostProcessor`实例且无特定安全bean时,此配置生效。`inMemoryUserDetailsManager()`方法创建内存用户,通过`UserDetails`对象填充`InMemoryUserDetailsManager`的内部map。若要持久化到数据库,需自定义`UserDetailsService`接口实