我有点问题。 给定:一些实数(例如-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 ^指数。 问题:如何获取尾数的二进制值?也许可以用更漂亮的方式做到这一点?
答案 0 :(得分:1)
答案 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
会产生该位。然后删除该位并重复该过程,直到提取出所有有效数字为止。