首页 > 解决方案 > 提取 IEEE 754 浮点格式数的小数部分时出现小错误

问题描述

所以我有这个函数,我提取了给定 int 的小数部分,以便我可以以十六进制形式输出它。

这是我的代码,其中结果是小数部分,然后我以十六进制形式打印。

// getting fraction part
    result = 0;
    int count = 0;
    for (int which_digit = 23; which_digit >0; which_digit--) {
        shifted_value = f >> (23 - count);
        int fractionn = (shifted_value & 1) * (1 << which_digit) ;
        result += fractionn;
        count++;
    }

如果给我数字 8,我的程序会正确打印小数部分的十六进制形式。但是,如果给定另一个数字,例如 -0.749000013,我的程序会打印 0x3fbe76 而不是 0x3fbe77。

有谁知道我哪里出错了

标签: cbit-manipulation

解决方案


你的循环结束条件是which_digit > 0,所以你跳过#0位。应该是which_digit >= 0。您还应该从第 22 位开始,而不是 23。

也就是说,您的整个循环可以用简单的result = f & 0x7fffff;. 没必要一点一点的去。


推荐阅读