根据IEEE754标准
只列举float类型单精度的问题,float以32位存储。
如,十进制数0.5,二进制表示为0.1,( =2^(-1) ),浮点数中以32位存储,存储格式为,0 01111110 00000000000000000000000 (符号位1位,指数位8位,尾数位23位)
其中:
0 01111110 00000000000000000000000
符号位(s) 指数(e) 尾数(0.m)
浮点型的表示都是1.XXXXXX×2^(n),所以尾数的存储自动省略第一位的1,
因此((-1)^s)*(1+0.m)*2^(e-127) // 解释127的来源,127=2^7-1
代入可得,s=0,e=126,m=0
((-1)^0)*(1+0)*2^(126-127) =2^(-1)=1.0*2(-1)= 0.1 = 0.5;
二进制 二进制 十进制
再一例,十进制数7.625,二进制数111.101,浮点数存储格式为,0 10000001 11101000000000000000000
代入可得,s=0,e=129,m=11101,0.m=0.11101
((-1)^0)*(1+0.11101)*2^(129-127) =1.11101*2^(2) =111 .101 = 7.625;
二进制 十进制
如下程序为输入一个数,得到float的存储格式
#include<iostream>
void main()
{
//exe2();
float a;
std::cin>> a;
int num = *(int*)&a;
for (int i = 0; i < 32; i++)
{
if ((int)num&(1 << (31 - i)))
std::cout << 1;
else
std::cout << 0;
}
}
第一次写博客,请各位批评指正。