float转int型

时间:2025-02-12 07:25:40

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;

}

最后输出即可。