STM32 写算法表达式时遇到强制转换时产生错误结果的疑问?

2019-12-20 21:30发布

最近写了一个算法公式。尝试了三种写法。如些
int32_t T;
int32_t dT;     //这个数值为378021
uint16_t C[8]; //C[6]数值为27784
//情况1
        T = ((int64_t) dT * C[6]) ;  //调试的时候,此时T=1913000872
        T= T/8388608;                 //调试的时候,此时T=228
//情况2
        T = ((int64_t) dT * C[6]) / 8388608;  //调试的时候,此时T=1252
//情况3
        T = ((int64_t) (dT * C[6])) / 8388608;  //调试的时候,此时T=228

结果情况2,算出来T是错误的。这是为何?求高手指教。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
liwei_jlu
1楼-- · 2019-12-21 02:30
不考虑溢出,算法2是对的。1和3在dt*C6计算后,做了32位截断,舍去了高位
liwei_jlu
2楼-- · 2019-12-21 07:36
应该说1和3的结果都是错的
小大琦_守护天使
3楼-- · 2019-12-21 10:41
liwei_jlu 发表于 2018-4-13 23:46
应该说1和3的结果都是错的

可是结果1和3才是我要的结果。我手动算了下。1和3的结果是对的
小大琦_守护天使
4楼-- · 2019-12-21 14:53
小大琦_守护天使 发表于 2018-4-13 23:50
可是结果1和3才是我要的结果。我手动算了下。1和3的结果是对的

是我错了。你是对的。没考虑溢出
小大琦_守护天使
5楼-- · 2019-12-21 19:46
 精彩回答 2  元偷偷看……

一周热门 更多>