查看: 3692|回复: 9
收起左侧

浮点数在内存中的存储方式

邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x

【基础知识】浮点数在内存中的存储方式

一、简述

在学习小型PLC中,在使用轴控指令时,对于参数的赋值采用的是浮点数。在赋值运算中,使用如下指令进行赋值,发现从浮点数转化为整型,数字竟然差距如此之大,因此,产生了这究竟是怎么产生的好奇心。

  DEMOV E1000.100 D0
  DMOV D0 D2'

  D0=1000.100
  D2=1148847718

因此开始在网上查找资料,终于明白了究竟是什么原因。

二、浮点数的二进制构成

众所周知、任何数据在计算机中都是以二进制的方式存储的。float型变量,在内存中占用32bit位,即4byte内存空间。
浮点数的二进制表达主要有三个部分构成

构成1 构成2 构成3
SIGN(标志部分) Exponent(指数部分) Mantissa(尾数部分)
占1bit 占8bits 占23bits

代表的含义为:

构成 含义
sign(1bit) 表示浮点数的正负。0代表正数,1代表负数。
Exponent(8bits) 指数部分:类似于科学计数法中的M*10^N,这里是以2为底。  需要注意的是,这里是以2^7-1即127(01111111)代表2^0,转换时需要根据加127做偏移。
Mantissa(23bits) 尾数部分:浮点数具体数值的实际表示

三、运算过程

1.整数部分的运算

整数部分为1000,则将1000直接转化为二进制,即:11,1110,1000

2.小数部分运算

小数部分为0.1 ,则0.1转换为二进制,即:.000110011001100110011...(无限循环小数)
小数转换为二进制的步骤为:将小数部分乘2,取整,直至小数部分为0.

0.1 * 2 =0.2   0
0.2 * 2 =0.4   0
0.4 * 2 =0.8   0
0.8 * 2 =1.6   1
0.6 * 2 =1.2   1
0.2 * 2 =0.4   0
0.4 * 2 =0.8   0
0.8 * 2 =1.6   1
0.6 * 2 =1.2   1
0.2 * 2 =0.4   0
0.4 * 2 =0.8   0
0.8 * 2 =1.6   1
0.6 * 2 =1.2   1

即:.000110011001100110011...为一个无限循环小数。

3.规范化

现在我们已有了1000.1转化为二进制的数值11,1110,1000.0001,1001,1001,1001,1001,10...。与科学计数法类似,我们需要将该数值规范化,写成M×2^N(1<M<2)。
即1.1111,0100,0000,1100,1100,110...*2^9。
这样就得到了我们想要的规范化数值。

4.内容填充

标志部分:1000.1为正数,该1Bit位为0
指数部分:在第二章中提到,在此有127的偏移,因此将9+127=136 ,即1000,1000,该8bits位,填入1000,1000
尾数部分:除了正常的填入外,整数部分的1一律省去(因为所有的数这里都是1)。因此该23bits填充为1111,0100,0000,1100,1100,110
这样就得到了我们想要的32位二进制数:0100,0100,0111,1010,0000,0110,0110,0110,转化为十进制,即:1148847718

四、总结

浮点数和整型数的存储方式是不同的,在使用时需要注意相关的转换。不然很容易出现大的问题。

已有 2 人打赏作者

cx4489190 赏了楼主5水滴 LYL 赏了楼主5水滴
回复 邀请回答送花

使用道具 举报

nt4623 2019-9-6 09:36:37 | 显示全部楼层
浮点数和整数在内存中的存储方式是不一样的,计算机原理有大概介绍
回复 送花

使用道具 举报

Patrical 2022-8-26 14:00:16 | 显示全部楼层
内容详细.感谢分享
回复 送花

使用道具 举报

Patrical 2022-8-26 14:00:24 | 显示全部楼层
内容详细.感谢分享
回复 送花

使用道具 举报

xiaboo 2023-4-22 23:22:22 | 显示全部楼层
内容详细.感谢分享
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部