gpt4 book ai didi

C 表达式在两个不同的编译器上的计算方式不同

转载 作者:太空狗 更新时间:2023-10-29 16:47:05 26 4
gpt4 key购买 nike

我的代码在 GCC 和 Atmel Studio 之间运行不同:

uint32_t tc = 107900;
int8_t m = 59;

tc = tc - (m*1800);

在 GCC 上,tc 中的结果是预期的 1700。

使用 AtmelStudio,tc 中的结果是 132772,这是不正确的。

问题似乎是 m*1800 项是使用 AtmelStudio 以 m 的有限精度计算的。

我的问题是,哪个编译器做得正确?

谢谢。

最佳答案

似乎在 AtmelStudio 上,int 是 16 位的,所以 m*1800 溢出,调用未定义的行为。在您的情况下,编译器给出的行为可能是将模 65536 减少到 [-32768,32767] 范围内,产生 -24872。那么tc - (m*1800)就是132772。

为避免这种情况,您需要将 m1800 转换为 uint32_t 或其他类型(例如 long) 在执行乘法之前结果不会溢出。

关于C 表达式在两个不同的编译器上的计算方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23097871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com