终于知道 “强制引用转换”有什么用了解决方案

终于知道 “强制引用转换”有什么用了做了个小试验:main(){inta1090781184cout (float&)a//主要是试验

终于知道 “强制引用转换”有什么用了
做了个小试验:

main()
{

int   a=1090781184;
cout < <(float&)a;     //主要是试验(float&)的作用

system( "pause ");
}

以上程序打印结果是8.25

首先分析下   :变量a的值
1090781184=0x41040000h=0100   0001   0000   0100   0000   0000   0000   0000  

然后根据浮点数标准IEEE754:       32位的float
----------------------------------

  31位                               30到23位                                                     22到0位  
符号位     (指数:介码:把补码符号位取反再减去1)         尾数(小数,原码表示)  
---------------------------------

0100   0001   0000   0100   0000   0000   0000   0000     实际上是:

符号:+(为正)       指数:   3(10进制)           尾数:0.0001+1   (1为缺省)=1.00001(2进制)
  0                               100   0001   0                       000   0100   0000   0000   0000   0000

合并起来为:     +1.00001e3=1000.01  
然后换算为10进制:8.25

所以   (float&)   的作用为让编译器把   int变量a   所在的内存   解释为float类型
也就是说这个内存区域   如果把他当着int类型来翻译   他上面的值就是1090781184
                                          如果作为double类型来翻译他的值就是8.25
                                          这也是变量的3要素的知识点

[解决办法]
楼主真用功啊,顶!
[解决办法]
还是有一些不明白,指数为什么是3,尾数又是如何得来的不懂。不过还是挺佩服楼主的。
[解决办法]
学习

编译器以不同的方式去读取相同的内容 是这个意思吧
[解决办法]
介码???只听说过反码是补码减一取反得来的。

有符号数在电脑里的存储方式都是以补码的形式存在,怎么有一个介码呀?
[解决办法]
mark
[解决办法]
good
[解决办法]
指数是3很简单,IEEE单精度浮点数格式中阶码的存储都是127移码,对与本例来说,10000010的十进制是130,减去127,自然就是3了。尾数的计算其实是在阶码之后有一个隐含的1,所以尾数才是1.00001,当然后面全是0,我们也就不写了,事实上在做浮点运算时,后面的位很有可能是随机值
[解决办法]
不错,学习了。:)

引用在很大程度上跟指针相通,因此“(float&)a”跟“*(float*)&a”结果一样也就不足为怪了。

它们应该都相当于reinterpre_cast的效果。
[解决办法]
功底强悍啊!学习了,记得学组成原理的时候对这个挺清楚的,转眼间忘了
[解决办法]
学习 (float&)a *(float*)&a
[解决办法]
xuexi
------解决方案--------------------


楼主强人啊