float的存储方式为 符号位 指数位 尾数部分
例如7.625
写成二进制形式是0111.101 >1.11101*2^2 指数位为2
转换成int型首先判断出符号位 确定正数还是负数 符号位1代表负数 0代表正数
一共32位 符号位1位 指数位8位 尾数位23位
因此右移31位即可求出符号位
int temp=*(int*)&f;
int sign;
if(temp>>31==0)
{
sign=1;
}
else
{
sign=-1;
}
再找出指数位 指数位存储为16进制
&(同1才为1)利用此 指数位8位设为1,其他数设为0,得出 0x7f800000;将数值和0x7f800000做&运算,使得其他部分均为0,再右移23位 减去指数偏差值127 得出指数位
{
int exp;
exp=&0x7f800000;
exp>>=23;
exp-=127;
}
得出指数位即可知道科学技术法小数点左移了几位,求出尾数部位(&上0x7ffffff后右移(23-exp)位,在前面加上一个1,即可得到int型
{
int tail;
tail=temp&0x7fffff;
int res;
res=tail>>(23-exp);
res|=(1<<exp);
}
最后加上符号位
{
return sign*res;
}
最后输出即可。