float在编程的意义中有什么意义

C/C++中float和double的存储结构_Linux编程_Linux公社-Linux系统门户网站
你好,游客
C/C++中float和double的存储结构
来源:csdn&
作者:qingtingchen1987
在C/C++中float是32位的,double是64位的,两者在内存中的存储方式和能够表示的精度均不同,目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。
无论是float还是double,在内存中的存储主要分成三部分,分别是:
(1)符号位(Sign):0代表正数,1代表负数
(2)指数位(Exponent):用于存储科学计数法中的指数部分,并且采用移位存储方式
(3)尾数位(Mantissa):用于存储尾数部分
对于两者在内存中的存储结构,如下图所示:
& & 数字float 9.125在十进制中用科学计算的方式表示为9.125*10^0 &,但是在计算机中,计算机只认识0和1,所以在计算机中是按照科学计算的二进制的方式表示的:
9的二进制表示为1001
<SPAN style="FONT-SIZE: 18 FONT-FAMILY: KaiTi_GB的二进制表示为0.001
所以91.25的表示成1<SPAN style="COLOR: #ff.001 &将其表示成二进制的科学计数方式为 1.^3&
在计算机中,任何一个数都可以表示成1.xxxxxx*2^n 这样的形式,
其中xxxxx就表示尾数部分,n表示指数部分
其中,因为最高位橙色的1这里,由于任何的一个数表示成这种形式时这里都是1,所以在存储时实际上并不保存这一位,这使得float的23bit的尾数可以表示24bit的精度,double中52bit的尾数可以表达53bit的精度。
& & 对于float型数据,可以精确到小数点后几位呢?当然,学过c的同学会说float能够精确到小数点后6位,但这是怎么的来的呢?下面做一点解释:
& & 十进制中的9,在二进制中的表示形式是1001,这里也就告诉我们,表示十进制中的一位数在二进制中需要4bit,所以我们现在float中具有24bit的精度,所以float在十进制中具有24/4=6,所以在十进制里,float能够精确到小数点后6位。同理,具有53bit精度的double类型能够精确到小数点后13位。
& & 对于float类型,他的指数部分有8bit,可以表示-127~128,但是这里采用了移位存储的方式(对这个概念不太清楚),在存储指数时数据的基数是127,而不是0,。例如上面的9.125,其二进制的指数部分为3,所以在存储时实际上存的是127+3=130。(130的二进制表示为)
最终根据上面图中float的存储结构可以知道,实际上9.125在计算机中:
上面的二进制数转换成十六进制后表示形式为:00
--& 41 10 00 00
实际上在X86计算机中,采用的是小端存储方式,即低地址存储低位数据,高地址存储高位数据。
所以数据应该是这样存储的:
对于double类型的存储方式实际上和float是类似的,只是存储的位数不同,在原理上都是一样的。这个可以参考这篇 &。
相关资讯 & & &
& (12/20/:13)
& (12/07/:01)
& (12/20/:56)
& (12/07/:51)
& (11/10/:36)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
匿名 发表于 有点误导人,既然你自己都说不清楚,还要发出来干嘛CSS中很多时候会用到浮动来布局,也就是经常见到的float:left或者float:right,简单点来说,前者是左浮动(往左侧向前边的非浮动元素飘,全是飘得元素的话,就按照流式来浮动从左到右,放不下则换行),后者是右浮(往右飘)动。但仅仅是如此吗?详细出处参考:http://www.jb51.net/css/33740.html
No!&要注意以下几点:&1、 浮动元素会被自动设置成块级元素,相当于给元素设置了display:block(块级元素能设置宽和高,而行内元素则不可以)。&2、 浮动元素后边的非浮动元素显示问题。&3、 多个浮动方向一致的元素使用流式排列,此时要注意浮动元素的高度。&4、子元素全为浮动元素的元素高度自适应问题。&以下详细分析四个问题。&一、浮动元素自动变块级元素&首先说说块级元素和行内元素区别,简单的来说,块级元素独占一行,可以设置宽高以及边距,行内元素不会独占一行,设置宽高行距等不会起效。常见的块级元素有:h1~h6、p、div、ul、table,常见的行内元素有:span、a、input、select等。&示例代码:&
&div style="height: 200 width: 200"& &span style="float: width: 150 height: 150 margin: 5 padding: 5 border: solid 1 background-color: O"&浮动元素span&/span& &/div& &div style="height: 200 width: 200"& &span style="width: 150 height: 150 margin: 5 padding: 5 border: solid 1 background-color: O"&浮动元素span&/span& &/div&
浮动元素span
浮动元素span
二、浮动元素后的非浮动元素问题
浮动元素后边的元素若是非浮动行内元素且因为定位产生重叠时,行内元素边框、背景和内容都在该浮动元素&之上&显示,若是非浮动块级元素跟在浮动元素后边且在定位后产生重叠时,该块级元素边框和背景在该浮动元素&之下&显示,只有内容在浮动元素不在浮动元素&之下&显示。&
示例代码如下:
&div style="width: 600 height: 500 border: solid 1 background-color:"& &div style="float: width: 250 height: 250 border: solid 1px A background-color: margin: 10px 0 0 10"& 浮动DIV&/div& &div style="background-color: border: solid 1 width: 300 height: 150"& 跟在浮动元素后边的DIV&/div& &span style="background-color: border: solid 1 margin: 0 0 0 -50"& 跟在浮动元素后边的span&/span& &/div&
跟在浮动元素后边的DIV
跟在浮动元素后边的span
从图中可以看出来,跟在浮动div后边的div背景以及边框被压在了底下,内容却没有,span整体都在浮动div之上显示。&不过在ie6这个效果却很怪异,如图:
浮动元素没有压在非浮动div之上,反而把span压住了。
三、多个并列同方向浮动元素高度不一致问题&
多个同方向浮动元素若是高度不一致的话,很可能会得到意外的效果,跟你想要的布局差别很大。多个同方向浮动元素一般是按照流式布局,一行满了则自动换行,也就是类似于以下效果:&
但各个浮动元素高度不一致的话效果很可能出现下边的情况:&
很意外吧,主要排列到元素7的时候,一行已经显示不下了,所以要换行,但此处换行并不是从行头开始,而是从元素5那开始,因为元素5比元素6高很多导致。
&四、子元素全为浮动元素高度自适应问题&
由于元素浮动后脱离了文档流,所以父元素是无法根据元素来自适应的。解决此问题最常用的办法由两种,第一种就是在所有浮动元素后加:&&div style="clear:height:0"&&/div&&第二种办法,使用万能clear:&
.clearfix:after
visibility:
font-size: 0;
content: ".";
height: 0;
* html .clearfix
*:first-child + html .clearfix
然后在你需要自适应的元素上加上class=& clearfix&即可。详细请参考:&你真的理解clear:both吗&
在开发中,从美工MM给你Html代码中,肯定能经常看&&div style="clear:"&&/div&&这样的代码,但是你真的能明白它是做什么用的吗?&
&div style="border:2"&
&div style="float:width:80height:80border:1"&TEST DIV&/div&
&div style="clear:"&&/div&
你可以将此部分代码放到一个HTML页面看看效果,然后在去掉&&div style="clear:"&&/div&&看一下效果,就知道这句话的作用了。&
如图:&(1)有clear:both的:
(2)无clear:both的
这样看,应该就一目了然了:原来后边的Clear:其实就是利用清除浮动来把外层的div撑开,所以有时候,我们在将内部div都设置成浮动之后,就会发现,外层div的背景没有显示,原因就是外层的div没有撑开,太小,所以能看到的背景仅限于一条线。&但这种办法就是最好了的吗?&我这么说,当然答案就不是了。可以采用通过Hack实现:
.clearfix:after{
visibility:
font-size: 0;
content: ".";
height: 0;
* html .clearfix{zoom: 1;}
*:first-child + html .clearfix{zoom: 1;}
&div class="clearfix" style="border: 2"&
&div style="float: width: 80 height: 80 border: 1"&
TEST DIV&/div&
看完解决办法,咱们来看里边的原理:&(1)、首先是利用:after这个伪类来兼容FF、Chrome等支持标准的浏览器。&:after伪类IE不支持,它用来和content属性一起使用设置在对象后的内容,例如:&a:after{content:"(link)";}&这个CSS将会让a标签内的文本后边加上link文本文字。&(2)、利用&* html&这个只有IE6认识的选择符,设置缩放属性&zoom: 1;&实现兼容IE6。&(3)、利用&*:first-child + html&这个只有IE7认识的选择符,设置缩放属性&zoom: 1;&实现兼容IE7。&详细出处参考:http://www.jb51.net/css/33740.html
阅读(...) 评论()c语言中float型用整型输出的结果是什么
c语言中float型用整型输出的结果是什么
09-10-18 &匿名提问
双精度浮点(长双精度)型数据用%lf输出短整型数据用%u输出%d 有符号10进制整数
&#160;%i 有符号10进制整数
&#160;%o 有符号8进制整数
&#160;%u 无符号10进制整数
&#160;%x 无符号的16进制数字,并以小写abcdef表示 &#160;%X 无符号的16进制数字,并以大写ABCDEF表示 &#160;%F/f 浮点数
&#160;%E/e 用科学表示格式的浮点数
&#160;%g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数
&#160;%c 单个字符
&#160;%s 字符串
&#160;%% 显示百分号本身
请登录后再发表评论!}

我要回帖

更多关于 精简编程的意义 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信