C语言中float到底能存多大的数?!

来源:百度知道 编辑:UC知道 时间:2024/06/03 21:26:27
很多书籍和资料都显示float的数据范围是-3.4E-38到3.4E38,但是float和long int的内存空间都占4个字节,也就是多大能存11111111 11111111 11111111 11111111这么多数(换算过来是4294967295,换成有符号数是2147483647),远远到达不了3.4E38这么大啊??而且我在VC++6.0的环境下测试,float最大只能放10E19这么大的数?请给出float在内存中是如何被分配空间的?还有float和int的区别有在何处?(除了float能存小数外)。谢谢!!

-------符号位--指数位----小数部分----(指数偏移量 )
单精度浮点数-1位[31]--8位 [30-23]-23位 [22-00]----(127)

一般情况下,
int在内存里以2进制补码存储,跟你想的差不多,这个就不用多说了;

float存储方式如上面所示,1位符号位,指数位8位,小数位23位,共32位即4个字节。假设小数位表示的纯小数为x,指数表示的数字为n,符号为负,则这个float数字为(-(1+x))×(2^n)。

纯小数部分用补码表示,小数位的位数与可以表示的数据范围无关,只与可以表示的有效数字有关,即表示精度有关。
指数位部分用移码表示,所以可以表示的大小是2^-127到2^128,即最大的数是2^128=3.4E38。也就是说表示范围是-3.4E-38到3.4E38。

1位符号位 8位指数 23位尾数

这里要探讨分为两个问题:
1.有效数字的问题,就是精度问题,2的23次方约为7位有效数字,相当于10的7次方(精度)。
2.对于可容纳的最大数的问题,8位指数,其中一位为指数符号,7位最大127,2的127次方是10的38次方数量级。

明白了吧

12

88