数据在内存中的存储(整形)

简介: 数据在内存中的存储(整形)

1.数据类型


在这之前我们就都知道在定义一个变量的时候都需要声明该变量的数据类型,同时在内存中是以二进制的形式进行储存。大小为4 个字节的int类型,就等于32 个比特位,即我们有32位数来存储信息。

255在空间之中就是这样存储的

image.png

而第一位则为我们的符号位;该位为 0 则为负数为 1 则为正数。而这就是-255。这时候就有人要问了:“难道255跟-255的区别不是只是一个符号位而已吗?”

image.png

原码反码补码


一个整形存储在内存之中的是他的补码,而我们的十进制数字转换成的二进制数字则是这个数的原码。对于正数来说该数的原反补码都相等,而负数的反码为原码除符号位外按位取反同时补码是反码的基础上加一。转成补码后我们发现补码与正255的差别就只有符号位不同而已。

image.png

image.png

image.png

unsigned的加入


在数据类型前加上unsigned说明该数据为无符号整型,即没有正负号没有符号位来参加运算。

2.储存方式


当我们打开VS中的内存窗口可以看到的是

image.png

我们可以看到在a的地址之中存放的是ff000000的数值。而255转化成十六进制则是 ff 这又有什么联系呢?

大端or小端储存模式


每个编译器的模式不一样 存储的方式取决与编译器,而不是电脑或个人设置。

image.png

说人话就是:我们把 255 看成 000000ff 将其低位保存的也就是ff放在低地址位。从上图我们可以看出内存的显示是由小到大的。即 a 所申请的四个字节的低地址位就是它的第一个字节(即低地址),所以我们将 ff 放在第一个字节如此往上递推。

image.png

image.png

同样123456的存储方式也是如此。这样的存储方式变成作小端存储模式

相反则为大端。

细心的同学这时候又会看到,为什么 4 0 不交换 e 2 不交换?

这是由于地址是以字节为单位的,每个地址单元都对应着一个字节只考虑字节之间的存储而没有进行字节内部的交换。

3.基本换算与应用


image.png

现在我们来看看这道题目。

定义变量的数据类型与最终打印所打印的数据类型是解决问题的关键。我们可以看到 a 变量是char的数据类型而char的大小只有 1 个字节而打印则需要打印一个整形,这时候就涉及到了整形提升。而整形提升的规律如下

image.png

image.png

而singned 跟普通的char并无区别所以结果一样

而unsigned char 的-1经过整形提升后变成

image.png

如此转换成十进制则是 255 同时原反补相同则输出255。

image.png

目录
相关文章
|
25天前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
54 11
|
2月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
|
2月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
91 1
|
2月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
22天前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
174 1
|
12天前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
20天前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
22天前
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
19 3
|
22天前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
44 1
|
1月前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。