1

我已经阅读了关于可疑截断的这个 Lint 警告的相关问题,但这里是一个纯粹的 C 案例。

以下行是Warning #647弹出的位置:

pCont->sig -= (signed int64_t)((sub2 << 8)/pCont->freq + 1);

wherepCont->sig也是 64 位有符号(类型signed int64_t),并且两者sub2都是freq32 位无符号。所有这些都是用armcc编译的。

已经尝试将其1转换为无符号 32 位,但没有成功,但问题仍然存在。

关于我可以尝试什么或这里出了什么问题的任何想法?

4

1 回答 1

4

这个关于警告的参考

例如:

(long) (n << 8)

如果 n 是无符号整数,则可能会引发此消息,而

(long) n << 8

不会。在第一种情况下,移位是以 int 精度完成的,即使随后转换为可能包含所有位的类型,高 8 位也会丢失。在第二种情况下,保留移位的位。

这似乎完全适合您的情况并且还向您展示了如何解决它。

于 2016-08-24T07:36:31.630 回答