关闭

C语言的浮点型数值

标签: 数据存储语言编程计算机
510人阅读 评论(0) 收藏 举报
分类:

三十二位机器下浮点型是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在进行浮点数存储的时候隐藏了需要补上。然后输出整型乘以符号得到整型形式。

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

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8990次
    • 积分:587
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论