C表达式对两个不同的编译器进行不同的评估

前端之家收集整理的这篇文章主要介绍了C表达式对两个不同的编译器进行不同的评估前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有在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.
原文链接:https://www.f2er.com/c/114122.html

猜你在找的C&C++相关文章