以float a=1.0f为例:
(int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1;
(int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换),即读a的内存时按照整数来读取,而不考虑a本来的类型。为1065353216(3f800000的十进制表示);
(int)&a是将a的地址(16进制数)转换为十进制,没有什么实际意义。
问题分析:
(1)float类型中,所存储的指数位=实际的指数+127,尾数部分为底数的小数部分(底数整数部分应为1,省略不写)。
特例:float a=0.0f;中0的存储,指数尾数均为0。
#include <iostream> #include <stdio.h> using namespace std; int main(){ float b=0.0f; cout<<(int)b<<endl; cout<<&b<<endl; cout<<(int&)b<<endl; cout<<((int)b==(int&)b)<<endl; return 0; }
float b=0.0f;运行输出:
若改为 float b=1.0f;则结果如下(1065353216是3f800000的十进制表示)