0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在C语言中,如何分配浮点数的存储方式?

存储界 来源:未知 作者:胡薇 2018-08-28 16:32 次阅读

C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?

float在内存中的存储方式如下图所示:

double在内存中的存储方式如下图所示:

无论是单精度还是双精度在存储中都分为三个部分:

1.符号位(Sign) : 0代表正,1代表为负

2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储

3.尾数部分(Mantissa):尾数部分

首先来看float类型(以2.25为例)

步骤一:符号位(占1个bit位)的数值

很容易看出此数为正数,因此符号位为0。

步骤二:指数位(占8个bit位)的数值

第一步:先将十进制的2.25转换成二进制0100.01;

第二步:将100.01用二进制的科学计数法表示为1.001;

第三步:将第二步所得数值写成指数形式1.001*(2^2);

第四步:将指数数值2+127=129,将129转化成二进制形式(1000 0001)写到指数部位。

步骤三:尾数部分(占23个bit位)的数值

将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。

所以单精度浮点数2.25在内存中的表示方式为:

0 1000 0001 00100000000000000000000

再来看double类型(还是以2.25为例)

步骤一:符号位(占1个bit位)的数值

很容易看出此数为正数,因此符号位为0。

步骤二:指数位(占11个bit位)的数值

第一步:先将十进制的2.25转换成二进制0100.01;

第二步:将100.01用二进制的科学计数法表示为1.001;

第三步:将第二步所得数值写成指数形式1.001*(2^2);

第四步:将指数数值2+1023=1025,将129转化成二进制形式(100 0000 0001)写到指数部位。

步骤三:尾数部分(占52个bit位)的数值

将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。

所以双精度浮点数2.25在内存中的表示方式为:

0 100 0000 0001 0010000000000000000000000000000000000000000000000000

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72755
  • 浮点数
    +关注

    关注

    0

    文章

    58

    浏览量

    15792

原文标题:浮点数在内存中的存储方式

文章出处:【微信号:cunchujie,微信公众号:存储界】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    小数在内存中是如何存储的?为什么C语言中浮点数不支持位移操作?

    小数在内存中是如何存储的?为什么C语言中浮点数不支持位移操作?
    发表于 08-16 09:24 664次阅读
    小数在内存中是如何<b class='flag-5'>存储</b>的?为什么C<b class='flag-5'>语言中</b>的<b class='flag-5'>浮点数</b>不支持位移操作?

    浮点数如何存储

    浮点数如何存储玩转浮点数
    发表于 12-30 07:10

    浮点数的表示方法

    浮点数的表示方法  浮点数,是指小数点在数据中的位置可以左右移动的数据。它通常被表示成:    N = M* RE  这里的M(Mantissa)被称为浮点数
    发表于 10-13 17:13 1.6w次阅读
    <b class='flag-5'>浮点数</b>的表示方法

    在程序中得到一个浮点数的组成数

    浮点数存储时,是存储连续的字节中的,只要设法找到存储位置,就可以得到这些数了。可以定义一个void的指针,将此指针指向需要存储
    发表于 04-21 15:52 30次下载

    单片机浮点数运算的源码设计

    单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。本文详细介绍了浮点数在单片机中的表示方式和汇编子程序,浮点数比定点数加减法要困难,但是克服了定
    的头像 发表于 03-07 15:19 9538次阅读
    单片机<b class='flag-5'>浮点数</b>运算的源码设计

    浮点数在内存中的存储

    浮点数在内存中的存储和整数不同,因为整数都可以转换为一一对应的二进制数据。而浮点数存储是由符号位 (sign) + 指数位 (exponent) + 小数位 (fraction) 组
    的头像 发表于 09-20 10:52 3752次阅读
    <b class='flag-5'>浮点数</b>在内存中的<b class='flag-5'>存储</b>

    谈一谈浮点数的精度问题

    还是要从浮点数存储和标识出发来处理该问题,既然浮点数天然就存在一定的误差,而有时候计算又无法获得唯一的数值,如下图所示,浮点数计算出来的实轴上的值都会因为
    的头像 发表于 08-11 14:28 3410次阅读
    谈一谈<b class='flag-5'>浮点数</b>的精度问题

    什么是浮点数浮点数在内存中的存储

    浮点型简单讲就是实数的意思。浮点数在计算机中用以近似表示任意某个实数。
    的头像 发表于 11-09 11:07 3675次阅读
    什么是<b class='flag-5'>浮点数</b>?<b class='flag-5'>浮点数</b>在内存中的<b class='flag-5'>存储</b>

    什么是浮点数

    Python数据类型第一种:字符串(str)。 Python数据类型第二种:整数(int)。 Python数据类型第三种:浮点数浮点数的英文名是float,浮点数没有简写。
    的头像 发表于 02-23 14:58 3740次阅读

    PLC中浮点数的二进制表示

    我们日常使用的各类数据,都是以二进制的方式存储的。以浮点数为例,在PLC中其表示方式使用了IEEE 754标准。许多编程语言中
    的头像 发表于 03-23 13:50 3531次阅读
    PLC中<b class='flag-5'>浮点数</b>的二进制表示

    西门子PLC浮点数程序案例分享

    64位浮点数保存于VB0开始的存储区中,转换得出的32位浮点数保存于VD100中。
    发表于 10-27 17:07 1426次阅读
    西门子PLC<b class='flag-5'>浮点数</b>程序案例分享

    单精度和双精度浮点数的区别

    在计算机科学和数值计算中,浮点数是一种用于表示实数的数据类型。浮点数有两种精度级别:单精度和双精度。这两种精度级别在表示范围、精度和存储空间等方面都有所不同。本文将详细介绍单精度和双精度浮点数
    的头像 发表于 12-13 10:55 1476次阅读

    单精度和双精度浮点数的区别

    单精度和双精度是计算机中表示浮点数的两种不同的精度。在计算机中,浮点数用来表示带有小数部分的实数,而单精度和双精度用来表示浮点数的精确程度不同。在以下文章中,我将详细介绍单精度和双精度浮点数
    的头像 发表于 12-15 10:25 2561次阅读

    modbus浮点数怎么读取

    常重要的。 首先,要理解Modbus浮点数的表示方式。在Modbus协议中,浮点数采用了IEEE 754标准进行编码和解码。IEEE 754标准定义了浮点数的二进制表示方法,包括符号位
    的头像 发表于 12-28 14:38 1643次阅读

    一文带你秒懂IEEE 754浮点数

    一、简介1、常见的浮点数表示方式是IEEE754标准,它规定了浮点数存储格式和运算规则,这个标准定义了两种浮点数表示:单精度和双精度。2、
    的头像 发表于 03-18 08:09 880次阅读
    一文带你秒懂IEEE 754<b class='flag-5'>浮点数</b>