C语言 提取 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。

有谁知道我哪里出错了

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

也就是说,您的整个循环都可以替换为 简单的result = f & 0x7fffff;.没有必要一点一点地走。

最新更新