我已经阅读了有关可疑截断的Lint警告的相关问题,但这里纯粹是C案例。
以下行是弹出Warning #647
的地方:
pCont->sig -= (signed int64_t)((sub2 << 8)/pCont->freq + 1);
其中pCont->sig
也是64位签名(类型signed int64_t
),sub2
和freq
都是32位无符号。所有这些都是用armcc编译的。
已经尝试将1
转换为无符号32位但没有成功,但问题仍然存在。
关于我可能会尝试什么,或者这里出了什么问题的任何想法?
答案 0 :(得分:4)
来自this reference about the warning
例如:
如果n是unsigned int,(long) (n << 8)
可能会引出此消息,而
(long) n << 8
不会。在第一种情况下,移位以int精度完成 即使存在a,高阶8位也会丢失 后续转换为可能包含所有位的类型。在 第二种情况,保留移位的位。
这似乎符合您的情况完全并且还会告诉您如何修复它。