相关疑难解决方法(0)

有符号和无符号整数乘法

在定点数学中,我使用了大量的16位信号,并使用32位中间结果进行乘法运算.例如:

int16_t a = 16384; //-1.0q14  or 1.0*2^14
int16_t b = -24576; // -1.4q14  or 1.4*2^14
int16_t c; // result will be q14

c = (int16_t)(((int32_t)a * (int32_t)b)>>14);
Run Code Online (Sandbox Code Playgroud)

让我们说a是q14数,然后c与b具有相同的比例.

这很好,适用于无符号和带符号的算术.

问题是:如果我要混合类型会发生什么?例如,如果我知道乘数"a"总是在0.0到1.0的范围内,那么很容易使它成为无符号整数q15以获得额外的精度(并将移位计数更改为15).但是,我从未理解如果你试​​图在C中乘以有符号和无符号数并避免它会发生什么.在ASM中,我不记得在任何架构上都存在可以与混合类型一起使用的乘法指令,所以即使C做了正确的事情,我也不确定它会生成有效的代码.

我是否应该继续不在定点代码中混合签名的无符号类型?或者这可以很好地工作吗?

c math types fixed-point multiplication

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

fixed-point ×1

math ×1

multiplication ×1

types ×1