float转int型

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;

}

最后输出即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值