码迷,mamicode.com
首页 > 编程语言 > 详细

C语言 float、double数据在内存中的存储方式

时间:2017-04-29 19:53:48      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:ieee   img   表示   最大   应该   存储方式   整数   alt   logs   

float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit)
指数部分
指数位占8bit,可以表示数值的范围是0-255(表示0~255一共256个数),因为指数可正可负,所以IEEE规定,此处算出的次方必须减去127才是真正的指数,
所以float的指数范围是 -127(0-127) 到+128(255-127)。 底数部分 任何一个数的科学记数法都可以表示为1.xxx*2^n,小数部分就可以表示为xxx,整数部分永远是1,不影响精度,所以可以不用储存。23bit二进制可以表示的
最大值是2^23=8388608,一共7位,这意味着最多能有7位有效数字(不能表示比8388608大的数值),但绝对能保证的为6位,即float的精度为6~7位有效数字。 以8.25为例: 8.25=1000.01 1000.01的科学记数法是1.00001*2^3 符号位,正数为0,负数为1 指数=3,即x-127=3,因此x=130,所以指数位应该是120,对应的二进制数是10,000,010 底数=00001,不足补0,所以23bit对应的二进制数是00,001,000,000,000,000,000,000 所以最终在内存中二进制数是 0 10,000,010 00,001,000,000,000,000,000,000 4个字节的值是 65 4 0 0

技术分享

说明:本人主机的字节序是大端字节序,所以顺序相反
double存储方式和float相同,区别在于64bit=符号位(1bit)+指数位(11bit)+底数位(52bit)
指数部分算出的次方必须减去1023才是真正的指数,
double的小数部分可以表示的最大值是2^52=4,503,599,627,370,496,这意味着最多能有16位有效数字,但绝对能保证的为15位,即double的精度为15~16位有效数字。

 

C语言 float、double数据在内存中的存储方式

标签:ieee   img   表示   最大   应该   存储方式   整数   alt   logs   

原文地址:http://www.cnblogs.com/zhanggaofeng/p/6785875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!