本文只考虑了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

最低0.47元/天 解锁文章
5746

被折叠的 条评论
为什么被折叠?



