Hier im Forum wird öfter mal die Optimierung des Compilers erwähnt, die Divisionen durch Zweierpotenzen mit Shift-Befehle ersetzt. Hieraus könnte man schliessen, das der Ausdruck: foo/=2; gleichzusetzen ist mit foo>>=1; Das stimmt jedoch nur für vorzeichenlose Typen !! Beim Typ int oder int16_t addiert der Compiler bei negativen Zahlen jedoch (Nenner-1) bevor er schiebt. Das ist auch völlig korrekt so, denn sonst würde -3/2 das Ergebnis -2 liefern anstelle der erwarteten -1. -3>>1 ergibt nämlich -2 !! Ich erwähne das, weil ich darauf reingefallen bin. Wollte eigentlich das niederwertige Bit einer Variablen löschen und dann mit 50 multiplizieren. Der Ausdruck (foo/2)*100 führte jedoch zu falschen Ergebnissen, als foo negativ wurde...
Vorzeichenbehaftete Zahlen solltest du nicht shiften. Das Ergebnis ist im C-Standard IIRC als implementation defined angegeben. Es ist besser du verwendest eine Division x/=4; Der Compiler kann das automatisch in einen Shiftbefehl umsetzten und vorzeichenbehaftete Variablen korrekt verarbeiten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.