计算机中浮点数的表示问题
现给出以下三个问题,望高手解答。1,浮点数在计算机中如何表示;
2,给出一个浮点数(float型):0X0376E979,能否写出它对应的十进制值;
3,给出五个浮点数(float型):-1, 1, 0, 1.5, -1.5,请写出其对应的十六进制码。
[[it] 本帖最后由 xunxunmimi 于 2008-5-14 15:13 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我只知道 0X0376E979 = 0.0
同一个浮点数在内存中可能有不同的表示方法,float数 0x0DA24260 同样也为 0.0
你可以看下IEEE754标准
这是关于浮点数的文章: http://blog.csdn.net/khler/archive/2007/08/17/1749102.aspx
http://www.pediy.com/bbshtml/bbs6/pediy6610.htm
这还有个浮点数转换的网页:http://www.h-schmidt.net/FloatApplet/IEEE754
[[it] 本帖最后由 netsolo 于 2008-5-14 16:40 编辑 [/it]]
----------------解决方案--------------------------------------------------------
你用printf可以显示出来:
float a = (float)0X0376E979;
printf("%f", a);
----------------解决方案--------------------------------------------------------
谢谢!
第二个问题,我实际上是问:在内存中的存放形式为0X0376E979的浮点数所代表的数。如果将0X0376E979直接赋给一个float型的数,其在内存中的表示形式就不是0X0376E979了。昨天我误以为赋值后在内存中的形式就是0X0376E979,所以就那样提问了,今天才发现搞错了。
第三个问题,今天突然发现在VC编程环境中,将各个数分别赋值给float型变量,通过调试时的反汇编窗口可以看到各个数的十六进制表示。
第三个问题似乎解决了,第二个问题还需再查查资料。
----------------解决方案--------------------------------------------------------
比如f是float变量,你这么写:
(int&)f=0X0376E979;
----------------解决方案--------------------------------------------------------
看信息编码
IEEE浮点标准:(-1)^s*M*2^E
(-1)^s符号位
M二进制小数
指数E是2的幂(可为负)
c语言:
因此划分三个域:(位)
单精度:符号位:1 指数域:8 小数域:23
双精度: 1 11 52
整数值:12345(0X3039) 单精度:12345.0(0x4640E400)
|0000|0000|0000|0000|0011|0000|0011|1001|
0|1000|1100|1 0000|0011|1001|0000000000
|| | |
1位 8位 23位
----------------解决方案--------------------------------------------------------