Gast
#283840
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...