I-Code, der anders zwischen GCC und Atmel Studio ausgeführt wird:C Ausdruck unterschiedlich auf zwei verschiedene Compiler Auswertung
uint32_t tc = 107900;
int8_t m = 59;
tc = tc - (m*1800);
auf GCC, ist das Ergebnis in tc
1700, wie vorgesehen.
Mit AtmelStudio ist das Ergebnis in tc
132772, was nicht korrekt ist.
Das Problem scheint zu sein, dass der m*1800
Begriff mit der begrenzten Genauigkeit von m mit AtmelStudio berechnet wird.
Meine Frage ist, welcher Compiler es richtig macht?
Vielen Dank.
Ich würde mir vorstellen, dass Casting 'm' zu' uint32_t' in der Ausdruck (dh 'tc = tc - ((uint32_t) m * 1800)') würde die gewünschten Ergebnisse erzeugen, aber ich bin mir nicht sicher, dass es erforderlich ist nach den Spezifikationen der C-Sprache. –
... oder verwenden Sie '(m * 1800L)', da das arithmetische Produkt von 59 * 1800 nicht in den _minimum_ angegebenen Bereich von -32767 bis +32767 passt, aber in das angegebene _minimum_ C passt Angebot. – chux
Offensichtlich verwendet dieser Compiler standardmäßig 16-Bit-Ganzzahlen. Erwartetes Verhalten –