C语言中怎么存储浮点数
这篇文章给大家介绍C语言中怎么存储浮点数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
创新互联建站是一家集网站建设,尼元阳企业网站建设,尼元阳品牌网站建设,网站定制,尼元阳网站建设报价,网络营销,网络优化,尼元阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
C语言中,有两种类型的浮点数:32位的float和64位的double,而在计算机中存储的是用二进制的科学计数法(即基数为2)表示的值
例如100=1100100B=1.1001B*26,123.456=1111011.0111010010111100011010100111111011111001110111B=1.1110110111010010111100011010100111111011111001110111B*26
既然基数固定为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再看一个纯小数的存储,例如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位小数都是正确的,精度还可以最后试个double的123.456
二进制就是: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语言中怎么存储浮点数
路径分享:
http://scyanting.com/article/pdicsj.html