У меня есть код, который работает по-разному между GCC и Atmel Studio:
uint32_t tc = 107900;
int8_t m = 59;
tc = tc - (m*1800);
В GCC результат в tc
равен 1700, как и предполагалось.
В AtmelStudio результат в tc
равен 132772, что неверно.
Проблема, по-видимому, заключается в том, что член m*1800
вычисляется с ограниченной точностью m с помощью AtmelStudio.
Мой вопрос в том, какой компилятор делает это правильно?
Спасибо.
m
кuint32_t
в выражении (т.е.tc = tc - ((uint32_t)m * 1800)
) даст желаемые результаты, но я не уверен, что это требуется спецификациями языка C. - person Jonathon Reinhart   schedule 16.04.2014(m*1800L)
, так как арифметическое произведение 59*1800 не вписывается в минимум указанный Cint
диапазон от -32767 до +32767, но вписывается в минимум C указанlong
диапазон. - person chux - Reinstate Monica   schedule 16.04.2014