如何在固定类型和浮动类型之间手动转换?

时间:2018-11-29 10:53:12

标签: c casting floating-point fixed-point

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

1 个答案:

答案 0 :(得分:2)

如果fix16_t是整数类型,则a / 65536将是整数除以小数。例如,65535 / 65536不是浮点值0.99998,而是整数值0

强制转换aa转换为整个表达式,并转换为带小数的浮点除法。


使用值:

  1. 整数除法:-230159901 / 65536将导致整数-3511
  2. 浮点除法:(float)-230159901 / 65536将产生float-3511.961426