如何在固定类型和浮动类型之间手动转换?
How to manually convert between fixed type and floating type?
我正在使用一个库,它有 不动点 variables.The 库叫做 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);
我以无符号整数格式显示 "sum",我再次不确定显示 "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
和整个表达式转换为带小数的浮点除法。
使用值:
- 整数除法:
-230159901 / 65536
将得到 整数 值 -3511
.
- 浮点除法:
(float)-230159901 / 65536
将得到 float
值 -3511.961426
。
我正在使用一个库,它有 不动点 variables.The 库叫做 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);
我以无符号整数格式显示 "sum",我再次不确定显示 "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
和整个表达式转换为带小数的浮点除法。
使用值:
- 整数除法:
-230159901 / 65536
将得到 整数 值-3511
. - 浮点除法:
(float)-230159901 / 65536
将得到float
值-3511.961426
。