gpt4 book ai didi

c - 如何手动在固定类型和 float 类型之间转换?

转载 作者:行者123 更新时间:2023-11-30 18:45:50 28 4
gpt4 key购买 nike

我正在使用一个具有定点变量的库。该库称为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 个整数位是有符号的还是无符号的?

最佳答案

如果 fix16_t 是整数类型,则 a/65536 将是一个整数除法,不带任何小数。例如65535/65536不是浮点值0.99998,而是整数值0

a 的转换会将 a 以及整个表达式转换为带小数的浮点除法。

<小时/>

使用值:

  1. 整数除法:-230159901/65536 将得到整数-3511
  2. 浮点除法:(float)-230159901/65536 将得到 float-3511.961426

关于c - 如何手动在固定类型和 float 类型之间转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537371/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com