C语言的浮点型数值

原创 2016年08月30日 22:20:20

三十二位机器下浮点型是32位,六十四位机器下浮点类型是64位。

   1)以平常使用的单精度浮点型为例,其存储分为3块。

   第一块符号位sign,由第一位来表示,1为负数,0为非负。

   第二块指数位exp,由8个二进制来表示,其存储的是二进制的指数值(二进制数化成正数位为1的指数形式,这种方式叫做隐含的以1开头的表示)加上偏移,单精度的偏移是127

   第三块是位数位frac,由23个位构成,表示的是二进制数第一个1以后的二进制串。

  2)浮点型的存储因指数位的不同,分为规格化的,非规格化的和无穷大,非数四种情况组成。

  a.规格化的:exp!=0 && exp !=255,即指数位不全为零,也不全为1时的情况。此时存储的指数位是加上偏移127。其位数二进制表示为0 <= frac < 1,其位数实际为M = frac + 1;

  b.非规格化的:exp = 0,存储的指数位是E = 1 - 127,其位数位为M = frac,不再包含隐含的开头1

c.无穷大:exp = 255frac = 0,当sign = 0时是正无穷,当sign = 1时是负无穷。

d.NaN(not a number)exp = 255frac != 0;比如根号下负一的值。

例如:float f=0; f的存储全为零。当符号位为1的时候为-0

双精度浮点型的一些参数:双精度的指数位由十位二进制构成,其偏移是1023,其尾数位为53位。

 

float型浮点数的取值范围:1.20e-38(2*2^)-----3.40e+38(2*2^).

double型浮点数取值范围:2.2e-308(2*2^)------1.8e+308(2*2^).

取出计算机中的浮点型数据:

void  float_spa(float f)

{

int d = *(int *)&f;  //将浮点型的存储形式用整型表现出来

int sign = (0x80000000 & d) >> 31;   //将符号位取出来

int exp = ((0x7f800000 & d) >> (32 - 9)) - 127;   //取出指数位

//其中特别注意exp0

int frac = ((0x007fffff & d) | 0x00800000) >> (23-exp);                             

}

    了解浮点型的存储格式,并且掌握位运算和移位操作。

将浮点型中的各部分通过位运算和移位操作按块出来,首先确定函数的符号,其次拿出指数位,减去偏移,得出尾数位中需要向右偏移多少位是整数部分,其中有一个1在进行浮点数存储的时候隐藏了需要补上。然后输出整型乘以符号得到整型形式。

指数位全为零和指数位全为一的存储与普通浮点数存储的形式在偏移计算中略有不同。将其三种不同详细介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言中单精度和双精度浮点型数据的数值范围

犀利的解释:原文出处http://bbs.bccn.net/thread-316069-1-1.html 单精度8位阶码,1位符号,剩下23位尾数,算出2的负23次方,得到0.00000011920...

C语言浮点数运算,讲述原理并总结一些案例

有些C语言书上说float型的有效位数是6~7位,为什么不是6位或者7位?而是一个变化的6~7位?         浮点数在内存中是如何存放的?         float浮点数要比同为4字节的i...

C语言基础学习基本数据类型-浮点型

c语言里的浮点型数据类型

C语言编程实现,浮点型与字符数组相互转化

欢迎转载,请注明出处,本文地址:http://blog.csdn.net/jk050802/article/details/8628764 联系邮箱:yinfork@foxmail.com ...

关于浮点数的精度与取值范围的问题

作者: jillzhang     联系方式:jillzhang@126.com    本文为原创,转载请保留出处以及作者, 谢谢    C语言和C#语言中,对于浮点类型的数据采用单精度类型(floa...

C语言(浮点精度)

关于C语言的浮点数精度问题,很多人存在误解,他们往往认为精度指的是float、double和long double三种数据类型,这是片面的。   拓展: 浮点数的二进制存储细节: ...

C语言各种数据类型取值范围

转自:http://blog.csdn.net/mafuli007/article/details/7325510 速查表: char -128 ~ +127 (1 Byte)...

c语言中获取整数和浮点数的符号位

1. 为什么要获得符号位 很多时候,我们需要判断数值的正负,来做相应的逻辑处理。条件判断语句可以很好的完成这个需求。有时候会有下面的情况, if (x > 0) { x = x - 1;...

c语言代码输出浮点型

  • 2014-12-09 13:03
  • 297B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)