我试图从双精度数中提取尾数和指数部分。 对于测试数据'0.15625',期望的尾数和指数分别为'5'和'-5'(5*2^-5)。
double value = 0.15625;
double mantissa = frexp(value, &exp);
结果:尾数为0.625,指数为-2
。
在这里,返回的尾数是一个分数。对于我的用例(ASN.1编码),尾数应该是整数。我理解通过将尾数右移并调整指数,可以将二进制小数转换为整数。在此例中,0.625 base 10
是 0.101 base 2
,因此需要3
个字节进行移位以得到整数。但我发现很难找到通用算法。
所以我的问题是,如何计算要移动多少位才能将十进制小数转换为二进制整数?
frexp
不是你需要的,因为它返回一个标准化值-在范围[0.5, 1)
(或相应的负范围)内。你能解释一下你实际上需要这两个整数值吗?也许简单的位提取更适合? - Adrian Mole