【发布时间】:2023-04-01 07:28:01
【问题描述】:
我正在使用具有定点变量的库。该库名为libfixmath。
我正在尝试查看数字如何从 fix16_t 转换为 float 类型。我知道它使用 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 个整数位是有符号还是无符号?
【问题讨论】:
-
fix16_t的实际类型是什么? -
@Someprogrammerdude 在库中它是这样定义的“typedef int32_t fix16_t”
标签: c casting floating-point fixed-point