十二.C++网络安全学院之浮点数在内存中的储存方式

本文介绍了单精度float和双精度double类型的小数在内存中的存储结构,包括符号位、指数位和尾数,并通过实例详细解析了如何将小数转换为二进制和科学计数法,以及在内存中的表示形式。同时,讨论了转换为DWORD和QWORD型时指数位对结果的影响。最后,提出了几个计算练习,涉及float和double类型的数值转换。
摘要由CSDN通过智能技术生成

一个小数,无论是单精度的float型还是双精度的double型,在内存中都会储存为三个部分,即符号位,指数位,尾数

符号位就是小数的正负,0代表正数,1代表负数

那指数位是什么呢?

其实小数在内存中都是以科学计数法去存放的,而指数位则用来存放科学计数法的指数数据,一会我们再细说

尾数用来存放科学计数法后的尾数,也就是小数部分

听起来是不是有些懵?不要紧,咱们举一个例子就明白了

比如我们有一个float型的8.25,要计算出他在内存中是如何存放的

首先将其转化为二进制

整数部分的转化我们之前已经讲过了,主要采用的是除法

而小数部分则需要用乘法,

0.25*2=0.5        记0

0.5*2=1.0          记1

于是小数部分为0.01

所以8.25=(1000.01)2

大家可以思考下,如果是8.3转成二进制会是什么样子呢?

下面将1000.01转成科学计数法,得到1.00001*103

首先是符号位,float型小数的符号位存放在0-31位的最高位也就31位,由于是正数,所以计0

然后是指数位,float型小数指数位为23-30位,起始值是127,也就是(0111 1111)2,代表0次幂

1次幂则用1000 0000表示

那么3次幂表示为1000 0010

最后是尾数,也就是剩下的0-22位,用来表示小数位,即00001000000000000000000

然后我们将这三部分拼起来,即01000001000001000000000000000000

转成16进制为0x41040000

以上是float型数据在内存中的存放方式,double型的存放方式是与其类似的

不同的是double型的指数起始值是1023,占用52-62这11位,而尾数则占用0-51这52位,算上符号位一共是64位

大家可以尝试着写一个double型的数据来算一算哦。

这里面我们说的第几位 实际都是我们转换成4字节以后的位数 不是内存中真实的位置 只要简单了解规则即可

为什么所有的小数转换成DWORD型都长的很像呢?这就要从指数位说起了。

我们以float型为例,如果指数是负数或者0,那么他的指数位通常表现为011xxxxx,

如果是正数指数位则表现为100xxxxx

如果算上前面的符号位,那么前面4位可能为0011,0100,1011,1100,转化成16进制则为3,4,B,C

所以说小数转换为DWORD型之后都长的很像

算一算以下float型数据在内存中是如何储存的,写出计算过程,并转化为DWORD型

6.125                 15.5                 2

0.25                    0.3                  10.005

算算以下double数据在内存中是如何储存的,写出计算过程,并转化为QWORD型

5.0625                1

视频链接:        

交流群:833075627

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值