我有在GCC和Atmel Studio之间运行不同的代码:
uint32_t tc = 107900; int8_t m = 59; tc = tc - (m*1800);
在海湾合作委员会,tc的结果是1700,如预期.
使用AtmelStudio,tc中的结果是132772,这是不正确的.
问题似乎是,使用AtmelStudio,m * 1800术语的计算精度有限.
我的问题是,哪个编译器正确地做?
谢谢.
解决方法
两者都正确地进行.表达式m * 1800将以类型int计算.如果int是32位,那么它将是106200.如果int是16位,这是一个完全可以接受的方式来实现C编译器,那么它是-24872.