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