我有一个 fx1.15 符号。基础整数值为 63183(寄存器值)。
现在,根据维基百科,完整长度为 15 位。这个值不适合里面,对吧?
所以假设它是一个 fx1.16 值,我如何将它转换为人类可读的值?
我有一个 fx1.15 符号。基础整数值为 63183(寄存器值)。
现在,根据维基百科,完整长度为 15 位。这个值不适合里面,对吧?
所以假设它是一个 fx1.16 值,我如何将它转换为人类可读的值?
要将定点值转换为人类可读的值,请将浮点除以 2 得到小数位数。例如,如果有 15 个小数位,则 2^15 = 32768,那么您将使用如下内容:
int x = <fixed-point-value-in-1.15-format>
printf("x = %g\n", x / 32768.0);
现在将定点数转换为浮点数和调用printf()
是昂贵的操作,它们通常会破坏使用定点获得的任何性能。我想你这样做只是为了诊断目的。
另外,请注意,如果您的平台正在执行定点运算,因为浮点运算被禁止或不可用,那么您将不得不按照手动进行十进制转换的方式做一些不同的事情。将整数建模为基础浮点值乘以 32768 并从那里开始。这里有一些有用的定点代码。
ps 我不确定你是否仍然对这个答案感兴趣,ashirk,(我为其他人写了更多),但如果你有兴趣,欢迎来到 Stack Overflow!