Tag Archives: 编程范式2

float表示

首先看一段代码:

#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,所以最后计算出的浮点数将为一个奇小无比的数。