您的位置 首页 报告

浮点型数据存储方法剖析

笔试面试的过程中难免会遇到很多自己不清楚或者是当时不清楚的问题,关于浮点型数据的问题我认为是比较难的问题啦,如果不清楚浮点型存储问

书面考试面试的过程中难免会遇到许多自己不清楚或者是其时不清楚的问题,关于浮点型数据的问题我以为是比较难的问题啦,假如不清楚浮点型存储问题,答复问题只要猜成果了。

在面试的过程中一般面试官也很少问关于浮点数的问题,因为浮点数关于许多的处理器是不支持的,关于上层运用的程序员而言,存储类型的问题都会考虑,可是关于嵌入式程序员掌握内存的分配情况是有必要的,只要这样才干掌握根本的操作,关于浮点型数据,在C语言中存在两种类型的浮点型,其间一种是单精度的浮点型 (float)、双精度的浮点型(double)。浮点型数据和一般的整形数据具有较大的不同,详细的不同便是浮点型数据是一个近似值,并不是一个精确的值,这也便是为什么在比较浮点型数据的巨细时不能选用直接等于的办法进行比较,因为浮点型仅仅一个近似值,也便是一个值或许表明一个规模区间,这样的表达办法就使得对浮点型选用持平的判别办法进行判别或许不合理,只要经过比较一个数是否在这个小的规模内,在这个小的规模内阐明这个数能够表述这个规模内的数据。因此在核算值比较两个浮点数变量不能经过做差是否等于零来判别。而只能经过如下的办法判别:
  1. constfloat ESPSION=0.000001;
  2. if((x-y)>=-ESPSION&&(x-y)<=ESPSION)
这种完成办法是根本的比较办法,这种判读办法刚好便是判别变量是否处于一个规模内,这儿的规模是-0.000001
记住在网上关于浮点型的一道标题如下:

typedefuniontest
{
float a;
int i;
char c[4];
}Test;
int main()
{
Test t;
t.a = 5.0;
printf(“%f”,t.a)
printf(“%d”,t.i);
printf(“%c,%c,%c,%c”,t.c[3],t.c[2],t.c[1],t.c[0]);
return 0;
}

这个题刚开始看的时分我并不知道其间有什么问题,我以为便是简略的数值强制类型转化,可是后边我发现并不是强制类型转化,这个题只要搞清楚了数据的存储办法才干真实的清楚输出的成果。

其实关于数据类型的存储办法问题的标题类型许多,其间比较常见的有:1、存储空间巨细问题,即字节对齐问题,这种问题一般要求咱们对根本类型了解其间的根本原理,相对来说比较简略。2、字符串的长度问题,这种问题主要是经过sizeof,strlen这两个不同的函数来比较。3、还有一类问题便是选用 printf函数完成数据类型的转化问题。这种转化问题是在printf的格局中体现出来的,是各种关于内存散布最简单失误的当地,为什么说最简单失误呢,因为不同的参数就有或许发生不一样的输出成果,说白了这种题很简单犯错是因为咱们很少留意这些问题。
上面的这个题返回值十分的特别,为什么会特别呢?我就经过浮点数的根本存储办法来阐明。在32位体系中,float类型占有4个bytes,double则占有8个bytes。关于整形数据而言,咱们很简单就知道数据是次序存储的,虽然有巨细端之分,可是根本的原则咱们以为是依照次序存储的。可是 float和double型却是比较特别的数据类型,因为这两种数据类型并不是依照整形数据的次序存储办法进行存储的,而是依照必定的标志IEEE来完成的,都有各自的标志编码办法:
浮点型变量在核算机内存中占用4字节(Byte),即32-bit。遵从IEEE-754格局规范。一个浮点数由2部分组成:底数m和指数e。
±mantissa × 2^exponent
(留意,公式中的mantissa和exponent运用二进制表明)
(详细可参看深化了解核算机体系)
底数部分 运用2进制数来表明此浮点数的实践值。
指数部分 占用8-bit的二进制数,可表明数值规模为0-255。可是指数应可正可负,所以IEEE规则,此处算出的次方(便是来自内存存储的内容,存储指数)须减去127才是真实的指数(实践的指数,如12.5转化为二进制为:1100.100=1.100100*23, 3即为实践指数)。所以float的指数可从-126到128.
底数部分实践是占用24-bit的一个值,因为其最高位一直为1,所以最高位省去不存储,在存储中只要23-bit。到目前为止,底数部分23位加上指数部分8位运用31位。那么前面说过,float是占用4个字节即32-bit,那么还有一位是干嘛用的呢?还有一位,其实便是4字节中的最高位,用来指示浮点数的正负,当最高位是1时,为负数,最高位是0时,为正数。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/317748.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部