PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Darf der Compiler das ??? (Kaputt optimiert)



Siro
01.06.2011, 15:27
Hallo,
ich habe (hatte) ein Problem bei einer Berechnung in "C"
Nachdem ich mir den Assemblercode ansah, wurde der Fehler offensichtlich.
Für eine Division mit 16384 hat der Compiler einen Shift Rechts 14 eingesetzt.
Das ist für "positive" Werte völlig okay, aber bei negativen Werten geht es natürlich schief, es sei denn er hätte einen Spezialshift welcher das Vorzeichen beachtet. Hat der Cortex M3 aber nicht und genau für den wurde der Code erstellt.

Um es kurz zu machen, anbei der Code mit der Problemlösung.

Nun die eigentliche Frage:
Kommt nicht bei jeder Berechnung ohne Typecast als "Default(Standard) ein "int" heraus ? dann hätte der Compiler doch nicht einen Shift benutzen dürfen ?

Siro

Besserwessi
01.06.2011, 16:55
Bei der Berechnung wird der "größte" Datentyp übernommen. Auch bei der Subtraktion von 2 Unsigned werten bleibt das Unsigned.