我正在使用具有定点变量的库。该库称为 libfixmath 。
我正在尝试查看数字如何从fix16_t转换为浮点型。我知道它使用32位(整数为16 MSB位,十进制为16 LSB位)来表示数字。
这是我尝试的代码,这里的“ sum”是fix16_t类型。
float in_sum = fix16_to_float(sum);
printf("fix16 type sum:%u\n",sum);
printf("float type sum:%f\n",in_sum);
我以无符号整数格式显示“和”,同样,我不确定显示“和”值的最佳格式。
我得到的样本输出是:
fix16 type sum:4064807395
float type sum:-3511.961426
我看了一下转换功能:
static inline float fix16_to_float(fix16_t a) { return (float)a / fix16_one; }
fix16_one
是65536。
为了更好地理解,我希望能够手动进行转换,但是我不知道如何转换。我对类型转换(float)a
感到困惑。
我还有一个问题是16个整数位是带符号的还是无符号的?
答案 0 :(得分:2)
如果fix16_t
是整数类型,则a / 65536
将是整数除以小数。例如,65535 / 65536
不是浮点值0.99998
,而是整数值0
。
强制转换a
将a
转换为整个表达式,并转换为带小数的浮点除法。
使用值:
-230159901 / 65536
将导致整数值-3511
。(float)-230159901 / 65536
将产生float
值-3511.961426
。