位运算函数实现float型变量取整数位

本文只考虑了IEEE规格化值的转换场景,非规格化值/无穷大/NaN 等情况未做考虑。

关于浮点数的表示,推荐阅读《CSAPP》第二章:信息的表示和处理。

=================

虽然C语言自带隐式类型转换,即:

float f=12.25;

int a=f;

printf("%d\n",a);    //结果是12

但是这几天了解了float的结构,所以自己写了一个函数  int  ftoi(const float f)  来实现它

下面是float的结构:

float一共32位,其结构定义如下:


|-------- 31 -------|------------ 30-23 ------------ |------------ 22-0 ------------|


   符号位(sign)         指数部分(exp)                     小数部分(mag)



sign:符号位就一位,0表示正数,1表示负数


exp: 指数部分长8位,无符号整数。

阶码 E=exp-Bias,阶码长度k=8的情况下,Bias=2^(8-1) - 1 = 127。

mag:小数部分,定点小数,小数点在最左边,隐含了一个小数点左侧的1。

小数M = 1 + mag。

整体上是以2进制的科学记数法来表达,即:

V = 2^E * M

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值