浮点数的存储、类型转换知识点(面宝P34)

时间:2024-03-04 16:43:05

以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的十进制表示)