Manche Compiler optimieren die Division durch eine Konstanten, wie zB Division durch 3:
A = B / 3
Nehmen wir A und B mal als 8-Bit-Werte, dann ist das (zumindest algebraisch) gleichbedeutend mit.
A = 256 * B / 3 / 256
und nach Rundung von 256/3
A = 85 * B / 256
Die Multiplikation mit 85 wird dabei als 8*8=16 ausgeführt und vom Produkt die obersten 8 Bits als Ergebnis genommen.
Das geht schneller, weil Multiplikation und oberen Teil verwenden weitaus billiger ist als ne Division (zumindest für AVR).
Sowas kann man auch händisch hinschreiben. Allerdings können sich die Ergebnisse von A div 3 und 85*A div 256 wegen der Rundung um 1 unterscheiden.
Hier (für 3) bekommt man Gleichheit so:
A div 3 = 85*(A+1) div 256
Lesezeichen