首先看一段代码:
#include <iostream> using namespace std; int main() { int i1 = 5; float f1 = i1; cout << f1 <<endl; int i2 = 37; float f2 = *(float*)&i2; cout << f2 <<endl; }
由于float在内存中的表示如下:
f1不是原来的5,而是1.25*2的2次方,重新表示成浮点数的形式。
相对于f2,&i取地址变为int*后又转换成float*,再对它进行解引用,所以在同一块内存地址上以float形式读取。所以,37对应的比特位在浮点数的形式上,只能以此计算出.xxxxx的部分,而exp位为0,所以最后计算出的浮点数将为一个奇小无比的数。