C表达式对两个不同的编译器进行不同的评估
发布时间:2020-12-16 05:38:38 所属栏目:百科 来源:网络整理
导读:我有在GCC和Atmel Studio之间运行不同的代码: uint32_t tc = 107900;int8_t m = 59;tc = tc - (m*1800); 在海湾合作委员会,tc的结果是1700,如预期. 使用AtmelStudio,tc中的结果是132772,这是不正确的. 问题似乎是,使用AtmelStudio,m * 1800术语的计算精度有
我有在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.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |