数据(整型和浮点数)在内存中的存储

目录

1.整型在内存中的存储

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

1.大小端字节序存储:

2.字节序判断:

2.浮点数在内存中的存储

浮点数存储的过程

浮点数读取的过程

题目解析


1.整型在内存中的存储

我们先要明白:

整数在内存中是以二进制形式进行存储的,而整数的二进制表示方法有三种——原码、反码和补码,而整数在内存中存储的就是二进制的补码。

正整数的原码、反码和补码都相同

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

原码直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

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

补码反码+1就得到补码

既然我们已经知道整数在内存中是以二进制的补码进行存储的,那我们不妨看一下下面这段代码:

(注:0x开头表示十六进制)如上图:我们发现变量a是“倒着”存进内存中的,这是为什么呢?——这就不得不讲到我们的大小端字节序存储了。

当我们创建一个变量a并将“0x11223344”赋给它并存进内存时,我们好像有两种存储的方法——正着存进去(即11223344)或是倒着存进去(即44332211),如图:

而我们刚刚那段代码就是小端字节序存储,因此是“倒着”存放进内存中的。

由这段代码我们引出了一个新的东西——大小端字节序

大小端字节序存储和字节序判断
1.大小端字节序存储:

当超过一个字节的数据在内存中存储的时候,显而易见会出现存储顺序的问题,而按照不同的存储顺序,我们又分为大端字节序存储和小端字节序存储,具体概念如下:

大端字节序存储:

数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处
小端字节序存储:
数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处
而在vs的x86环境中,就是小端字节序存储,由此刚刚那段代码的“0x11223344”在内存中就是“倒放”着的。


2.字节序判断:

我们先看一道百度笔试题:

再来一题:

请问该代码的输出结果是什么?

如图:,我们发现输出来是一个极大的数字,这就不得不通过观察它的内存存储情况来判断为什么是这个数了,如图:

2.浮点数在内存中的存储

我们首先来看一道例题:

输出结果如下:

输出结果可能跟我们所想的略有差别,这是为什么呢?——这就跟浮点数在内存中的存储有关了。

浮点数的存储方式如下:

因此浮点数的存储,存的就是S、M、E相关的值

我们以5.5为例,其写成二进制是101.1,因此S = 0,M = 1.01 ,E = 2.

则它在内存中的存储如图:



浮点数存储的过程

如图:

简单来讲就是M存储时默认第一位总是1因此舍去,这样可以节省一位有效数字

而E为了防止其出现负数会加一个中间值

浮点数读取的过程

浮点数读取时M和S都可以正常读取,但E有特殊情况,如图:



题目解析

浮点数在内存中的存储我们已经基本讲解完了,那么我们回到开头的题目——看看它为什么是那样输出的吧。

如图:




完结撒花啦,如果觉得博主写的还过得去的话给个免费的三连吧亲🌼🌼

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值