关于整数和浮点数在内存中的储存的一些理解

1、整数在内存中的储存

3.1整数在内存中的存储
首先我们要了解计算机中的二进制表示方法有三种,分别为原码、反码、补码

而正数的原码、反码、补码都相同。

负数的话,原码里面最高位表示正负,1为负数,0为正数。

原码到反码,符号位不变其他位取反。

反码到补码,在反码的基础上加一就行了。

而补码到原码的话,取反加一就行了。

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

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


根据这张图我们可以发现,原本的地址为 11  22 33 44,但在vs里面我们可以发现里面的地址为

44 33 22 11这里是反向的

对于这种情况我们就要了解大小端

什么是大小端?

大端存储就是把低位字节内容保存在内存的高地址处,把高位字节内容保存到低地址处。

小端存储就是把低位字节内容保存在内存的高地址处,把高位字节内容保存到低地址处。

4、判断大小端函数


这个就可以用来判断大小段存储,可以看见在vs2022里面就是小段存储的。

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

要了解浮点数在内存中的储存,首先我们要了解浮点数在计算机内部的表示方法

根据国际标准IEEE754,任意一个二进制浮点数V可以表示成以下形式:

V = (-1)^S*M*2^E

(-1)^S表示符号位,当S = 0时,表示正数,当S= 1时,表示负数。

M表示有效数字,M是大于一小于二的数

2^E表示指数位

举个例子,5.5,用二进制来表示就是101.1,也就是1.011*2^2换成上面的表示方式也就是

(-1)^0*1.011*2^2,里面的S = 0,M = 1.011,E = 2。

接下来我们要了解浮点数在计算机内部的存储长什么样

IEEE754规定:

对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M

对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M

上图就是float类型浮点数的内存分配,而double也是同理。

2.1浮点数存的过程

前面也说过,既然1<=M<2,也就是说M的整数部分始终为1,当放入计算机内部时,这个整数位始终保持不变,那么我们是不是也可以将这个整数部分拿出来,将这个小数部分存进内存里呢?事实上IEEE754里面早就规定了,对于浮点数来说,存入数据时,通常只将M里面的小数部分存入内存里面,当取出来的时候再加上1就行了,这样可以达到节省空间的效果。

2.2浮点数表达式里面的E存储过程

首先E是一个无符号整型(unsigned int),在32位的浮点数里面存储的话,E有八个bit位,也就是它的取值范围为0~255,在64位的浮点数里面,E的取值范围为0~2047。但是我们知道在二进制里面的E是可以为负数的,为了解决这种情况,IEEE就规定了,存入内存时的E的真实值必须再加上一个中间数,对于8位的来说中间数是127,对于11位的E来说中间数是1023。

2.3浮点数取的过程

指数E从内存中取出还可以再分成三种情况:

1、E不全为0或不全为1

这时候将采用下面规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M在加上第一位的1。

2、E全为0

这时,浮点数的指数等于1-127或1-1023(这个规定就是这样的)即为真实值,有效数字M不在加上第一位的1,而还是原来的小数0.xxxxxxx的小数。这样做是为了表示+-0,以及是接近0的很小的数字。

3、E全为1

这时,如果有效数字M全为0的话,表示正负无穷大(正负取决于符号位s);

ok了,家人们,这就是我在关于整数和浮点数在内存中的储存的一些理解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值