打印
[STM32F3]

单精度浮点数转换为整数

[复制链接]
249|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
范德萨发额|  楼主 | 2024-8-16 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这段代码的主要功能是将单精度浮点数转换为整数。

我注意到在处理浮点数的位运算时有一些问题和改进的地方:

符号位的处理:

符号位的判断和处理有一些不必要的复杂性。实际上,可以直接通过位运算获取符号位,无需单独判断和设置 sign 变量。
指数位的处理:

目前的代码中对指数位的处理似乎存在误解。指数部分应该是从浮点数的位表示中获取,而不是直接减去偏置值(127)。正确的方式是将指数部分从浮点数位表示中提取出来,然后减去偏置值(127)来得到实际的指数值。
尾数位的处理:

尾数位的提取和处理看起来正确,但是后续的位移操作可能需要重新考虑。
基于以上观察,以下是修正后的代码实现,以更准确地将浮点数转换为整数:

C

#include <stdio.h>

int float_to_int(float f)
{
    int i;
    int f_new = *(int *)&f; // 将浮点数的地址强制转换为整数指针,以便进行位操作

    // 获取符号位
    int sign = (f_new >> 31) & 1;

    // 获取指数位
    int exponent = (f_new >> 23) & 0xFF; // 取出8位指数部分
    exponent -= 127; // 减去偏置值,得到实际指数

    // 获取尾数位
    int mantissa = f_new & 0x7FFFFF; // 取出23位尾数部分
    mantissa |= 0x800000; // 将隐藏位(尾数的最高位)补上,相当于尾数部分最高位补1

    // 根据指数移位得到整数部分
    if (exponent >= 0) {
        i = mantissa >> (23 - exponent); // 右移得到整数部分
    } else {
        i = mantissa << (-exponent); // 左移得到整数部分
    }

    // 根据符号位确定正负
    if (sign) {
        i = -i;
    }

    return i;
}

int main()
{
    float f = 13.55;
    printf("%d\n", float_to_int(f));

    return 0;
}


使用特权

评论回复
沙发
范德萨发额|  楼主 | 2024-8-16 13:42 | 只看该作者
这段代码中修正了符号位、指数位和尾数位的处理,确保了正确的浮点数到整数的转换逻辑。如果还有其他问题或需要进一步解释,请随时告诉我!


从帖子中讲解。
实现从float到int的强转
#include<stdio.h>
#include<stdlib.h>
int float_to_int(float f)
{

    int i;
    int f_new=*(int *)&f;//float不能直接做位运算
    /*符号位*/
    int sign=0;
    if(f_new>>31)  //sign初值设置为0 右移31位取出符号位
    {
        sign=1;
    }

    /*指数位*/
    int index=f_new&0x7f800000;  //011111111...(23个0)
    index=f_new>>23;
    index=index-127;   //130-127=3

    /*尾数位*/
    int temp=f_new&0x007fffff; //先和...(9个0)1111..(23个1)& 取出尾数部分放在临时变量中
    int mantissa=temp|0x00800000;  //因为最后尾数前要加1 所以现在就和00 (1000)0 00 00 |,相当于提前处理加1
    i=mantissa>>(24-(index+1));  //因为尾数提前加1 所以要右移24-(指数+1)位

    if(sign==1)  //如果符号位为1 为负数
    {
        i=-i;
    }
    return i;
}
void main()
{
    float f=13.55;
    printf("%d",float_to_int(f));
}

使用特权

评论回复
板凳
狄克爱老虎油| | 2024-8-17 23:04 | 只看该作者
浮点数转换为整数后运算速度会不会加快啊

使用特权

评论回复
地板
grfqq325| | 2024-8-28 12:07 | 只看该作者
对于将单精度浮点数转换为整数,主要任务是从浮点数的内存表示中提取并处理这些部分。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

875

帖子

1

粉丝