【发布时间】:2019-11-07 14:36:12
【问题描述】:
16 位数字的定点转换宏,具有最大值和最小值:
#define SCALEFACTOR_16(N) ( 1U << N )
#define Q_MAX16 ( SCALEFACTOR_16(16-1) - 1U )
#define Q_MIN16 ( -SCALEFACTOR_16(16-1) )
将最小值转换为 64 位:
int64_t x = (int64_t)Q_MIN16;
给:x == 0x0000 0000 ffff 8000
这是一个正数,而不是我的预期。
解决方法是将1U改为1UL:
#define SCALEFACTOR_16(N) ( 1UL << N )
在这种情况下,输出正常:x == 0xffff ffff ffff 8000
为什么第一个案例没有按预期工作?演员阵容期间会发生什么?
【问题讨论】:
标签: c fixed-point