Klammern ist immer gut, dadurch werden solche Ausdrücke auch besser lesbar
(wenn man trotzdem das Gefühl hat ein Ausdruck wäre mit Klammern schlechter lesbar, dann ist der Ausdruck zu lang und sollte ohnehin in mehrere leichter verdauliche Häppchen zerlegt werden)
Vielleicht noch eine Kleinigkeit zur Verwendung von Shifts als Ersatz für Multiplikation oder Division:
Normalerweise tut man das aus Performancegründen, aber nicht immer ist diese Variante auch tatsächlich schneller. Ein ATmega z.B. hat üblicherweise einen eingebauten Multiplizierer, der für eine 8x8 Bit Multiplikation genau 2 Takte benötigt. Ein Linksshift hingegen benötigt nur einen Takt, also müssten Multiplikationen damit ja doppelt so schnell laufen, korrekt?
Falsch!
Denn was viele übersehen ist, daß ein ATmega keinen Barrel-Shifter hat, d.h. er kann mit einem Shift-Befehl auch nur um ein Bit shiften. Es bleibt also nur ein einziger Fall übrig bei dem der Shift tatsächlich schneller ist, und das ist die Multiplikation mit 2.
Programmiert man in Assembler fällt das sofort auf, da die Shift Befehle jeweils nur einen Operanden haben (nämlich das zu shiftende Register). In C hingegen merkt man das überhaupt nicht (wer käme schon auf die Idee, daß "<< 7" mehr Befehle braucht als "<< 2").
Dazu kommen natürlich noch die schon erwähnten Sonderfälle die man beachten muss, wenn die Ergebnisse auch korrekt sein sollen.
Das nur mal als kleiner Hinweis am Rande, daß vermeintliche Optimierungen manchmal genau das Gegenteil von dem bewirken, was man eigentlich wollte.
Lesezeichen