【深度剖析】数据在内存中的存储(上)

简介: 【深度剖析】数据在内存中的存储

一. 数据类型的详细介绍


在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式,那么数据类型可以分为以下几种:

18403113d34a4a83a93bd41f7dbafc77.png

数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。在本文接下来的部分我们将介绍基本类型!


1)整数类型

53be6d54087c4ee2a91039d479a24d92.png

注:不同数据类型在不同环境下所占的字节大小是不一样的,下图供参考:

99d6dd76bc024ccdb972fdff7224d31d.png

2)浮点类型

84656c06bc58407697d8665b9eeee308.png


3)void类型

c6515fd8a33a4a1ca2e3b1ad9addfb2d.png


二 .整形在内存中的存储:原码、反码、补码


接下来我们介绍关于整形数据是如何在内存中存储的:


计算机中整数有三种二进制表示方法,即原码,反码,补码。三种表示方法均有符号位和数值位两部分,符号位都是用 0 表示“正数”,用 1 表示“负数”。


正数的原码,反码,补码相同;

负数的原码,反码,补码各不相同;


原码:直接将数值按照正负数的形式翻译成二进制就可以得到原码

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码

补码:反码+1就可以得到补码


对于整形来说:数据在内存中存放的是补码!!!

为什么呢?

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;

同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。


举个例子来介绍下原码反码和补码:

162febd4c6e54673af4885ace852b129.png

对于上面所说的,有的小伙伴可能会问,那为什么整形在内存中存放的补码呢?而不是原码和反码呢?


我们举个例子来验证一下这个问题:由于正数的原码反码补码相同,为了更好的证明,我们取个负数来演示:

d9ee610885474325b0cb449a2198714f.png

我们发现,在内存中拿出的地址,刚好对应我们的补码,一个字节对应8个比特位,所以1111=f,所以在内存中对应的地址就是fffffff6,至于为什么和内存中显示的f6ffffff不一样,这是我们后面要介绍的大小端问题,这个例子也很好的验证了在内存中存放的是补码!!!

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