提取尾数的二进制值

时间:2018-09-28 18:02:06

标签: c++ floating-point

我有点问题。 给定:一些实数(例如-474.875) 任务:提取尾数的BINARY值 对于数字-474.875,我需要此值1, 11011010111 * 2 ^ 8 我有一个程序:

const float d = -474.875f;
int exponent;
const float mantissa = frexp(d, &exponent);
double prev = mantissa * pow(2, exponent);

它计算十进制尾数(对于我的数字为-0.927490234)和指数(9)。我试图将此尾数转换为二进制...但是失败了……我得到了其他价值。 要获得原始值:尾数* 2 ^指数。 问题:如何获取尾数的二进制值?也许可以用更漂亮的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

您可能希望对浮点数和整数使用并集。这样,您将能够执行一些二进制操作,例如提取尾数。

这些链接可能会帮助您:

Floating Point to Binary Value(C++)

Binary representation with union

答案 1 :(得分:1)

const float mantissa = frexp(d, &exponent);之后,mantissa中的值是一个数字。它不是十进制数字。您可以使用以下方法将其转换为二进制文件:

float s = fabs(mantissa)*2;
std::cout << "The significand is " << (int) s << ".";
s = s - (int) s;
while (0 != s)
{
    s *= 2;
    std::cout << (int) s;
    s = s - (int) s;
}
std::cout << ".\n";

对于您显示的样本值,将显示“有效数为1.11011010111”。

代码只需将值乘以2,即可将小数点后的下一位移动到“小数点上方”。然后将其转换为int会产生该位。然后删除该位并重复该过程,直到提取出所有有效数字为止。