C语言中怎么存储浮点数

这篇文章给大家介绍C语言中怎么存储浮点数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联建站是一家集网站建设,尼元阳企业网站建设,尼元阳品牌网站建设,网站定制,尼元阳网站建设报价,网络营销,网络优化,尼元阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

C语言中,有两种类型的浮点数:32位的float和64位的double,而在计算机中存储的是用二进制的科学计数法(即基数为2)表示的值

例如100=1100100B=1.1001B*26,123.456=1111011.0111010010111100011010100111111011111001110111B=1.1110110111010010111100011010100111111011111001110111B*26

C语言中怎么存储浮点数

既然基数固定为2,尾数的整数部分固定为1,那存储时就可以省略掉它俩了,只需要存储另外三个信息:  正负符号+指数+尾数的小数部分

float:符号占1位,指数占8位,尾数小数占23位;

double:符号占1位,指数占11位,尾数小数占52位

不过指数也有正负,因此存储时加个偏移来表示。  float用8位表示指数,偏移就是127;  double用的是11位,那偏移就是1023
看看123.456用float是如何存储的:  因为是正数,符号位用0;指数是6,加上偏移127后,133=10000101B;尾数的小数部分的前23位是  1110110111010010111100  1  (第24位是1,因此需要进位),拼接成32位数就是0  10000101  11101101110100101111001  B=1123477881

C语言中怎么存储浮点数

再看一个纯小数的存储,例如0.00123456,这次倒着推导一下

计算机中存储的是983683318,转换为二进制就是0  01110101  01000011101000011110110  B。其中第一个0表示正值;挨着的8位01110101B=117,表示指数为(117-127)=-10;最后的23位表示尾数的小数部分,前面加上整数部分的1,再左移23位之后就是1  01000011101000011110110  B=10604790。那么原值就是10604790右移23位,再左移-10位,即10604790右移33位。而233=8589934592。所以原值就是10604790/8589934592=  0.0012345600  407571,可见前10位小数都是正确的,精度还可以

C语言中怎么存储浮点数

最后试个double的123.456

C语言中怎么存储浮点数

二进制就是:0  10000000101  11101101110100101111,00011010100111111011111001110111  B。其中第一个0表示正值;指数位是10000000101B=1029,表示指数为(1029-1023)=6;最后是52位尾数,前面加上整数部分的1,再左移52位之后,1  1110110111010010111100011010100111111011111001110111  B=8687443681197687。因此,原值就是8687443681197687右移52位,再左移6位,即右移46位,而246=70368744177664。

8687443681197687/70368744177664=123.456

C语言中怎么存储浮点数

关于C语言中怎么存储浮点数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网页题目:C语言中怎么存储浮点数
本文URL:http://ybzwz.com/article/pdicsj.html