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语言基础学习基本数据类型-浮点型

c语言里的浮点型数据类型
  • octopole
  • octopole
  • 2016年08月31日 09:48
  • 2854

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

欢迎转载,请注明出处,本文地址:http://blog.csdn.net/jk050802/article/details/8628764 联系邮箱:yinfork@foxmail.com ...
  • jk050802
  • jk050802
  • 2013年03月02日 13:44
  • 3204

第1-6讲 C语言输入输出整型、浮点型数据练习

/* *Copyright (c)2016,csdn学院 *All rights reserved. *文件名称:main.c *作 者:吴东锋 *完成日期:2016年5月21日 *版 本 号:...
  • eflash8
  • eflash8
  • 2016年05月24日 08:13
  • 1795

c语言的printf输出浮点数的一些问题

在printf时:如果以%f格式输出,将输出8个字节(scanf输入时,%f是4个字节)                    在参数入栈时如果是float型或者double型 直接入栈8个字节,此时...
  • aa838260772
  • aa838260772
  • 2014年09月23日 15:22
  • 4361

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

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

C语言的本质(4)——浮点数的本质与运算

C语言的本质(4)——浮点数的本质与运算
  • yincheng01
  • yincheng01
  • 2014年06月30日 12:36
  • 3100

C语言浮点型数据存储结构

1.float类型 float类型占四个字节,每个字节占8位,总共32位,其内存结构如下图: 31位为符号位:0表示正数,1表示负数 31~23位:共8位表示指数位,内存存储数据从0~2^8-1...
  • whzhaochao
  • whzhaochao
  • 2013年10月20日 17:01
  • 2975

浮点数不精确的问题

翻译资料:https://en.wikipedia.org/wiki/Floating_point#Accuracy_problemsNOTE:(一)如果大家对于十进制浮点数如何转换为二进制浮点数不太...
  • sinat_27088253
  • sinat_27088253
  • 2016年12月24日 16:12
  • 1202

C语言布尔、整形、浮点、指针变量与”零值”比较的if语句

在学习C语言中的if语句中,我遇到了变量与零值进行比较的一些问题,当比较的数值为浮点变量时,不能直接用 if (x == 0.0)或者 if (x != 0.0) ,由于float和 double...
  • ArchyLi
  • ArchyLi
  • 2016年10月16日 11:56
  • 1334

C语言计算浮点数的小数位数,屏蔽掉了浮点运算的误差

第一次去计算个
  • gdutxzy
  • gdutxzy
  • 2014年08月02日 23:08
  • 1481
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言的浮点型数值
举报原因:
原因补充:

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