coody_sz 发表于 2023-11-25 21:27 这样的话,其实程序中变量S没有必要定义为32位,只需Time定义为32位就可以了 |
coody_sz 发表于 2023-11-25 21:27 确实是这样,原来Time*17的结果仍然是存放在Time中,不是存放在S中,所以造成溢出丢失,所以把Time变量也改为32位就对了。谢谢各位的帮助! |
csmyldl 发表于 2023-11-25 20:50 Time溢出了呗。 |
S=(Time*17)/1000; 中Time为16位,*17有可能溢出导致不对。你用32为的Time试试。 |
Hephaestus 发表于 2023-11-25 15:21 Keil中还隐藏着不为人知的一面吗? |
Hephaestus 发表于 2023-11-25 15:21 这样确实也对,但很多程序中均用S=(Time*17)/1000;来计算,他们是如何实现的?但我的为何不能实现?这个表达式的关键问题在哪里? |
S=((S<<4)+S>>4)/1000; |
S=Time; S=((S<<4)+S)/1000; |