002
16.02.2011, 08:52 Uhr
ao
(Operator)
|
Zitat von Hans: |
Diese Art der Multiplikation/Division ist meisst schneller als die Operatoren * und / ...
|
Vor etlichen Jahren war das so üblich, ja. Moderne Compiler beherrschen solche Optimierungen von sich aus, man muss sich also nicht mehr den Quellcode versauen und >> schreiben, wenn man eigentlich / meint.
Es mag Ausnahmen geben, aber in der Regel haben arithmetische und Bitoperationen nichts miteinander zu tun. Deshalb gibt es keinen Grund, sie in einem Ausdruck zu vermischen oder gegeneinander auszutauschen. Fast immer führt sowas zu schlechter lesbarem Code.
Und manchmal auch zu üblen Fehlern, weil nämlich besonders Anfänger dazu neigen, "coole Hacks" einzusetzen, die sie irgendwo gesehen haben, aber nicht vollständig überblicken.
Darum möchte ich davor warnen, << und * bzw. >> und / leichtfertig auszutauschen. Genauso + und |.
Zitat: |
Ansonsten braucht man die meisst, wenn man Systemnah programmiert, und viel mit Bitmustern und deren Manipulation zu tun hat.
|
Richtig. In Quellcodes für Mikrocontroller tauchen sie sehr häufig auf, dort, wo Hardware-Register programmiert werden und wo einzelne Bits oder Gruppen von Bits gezielt angesprochen werden.
In diesem Anwendungsbereich ist besonders wichtig, dass man sich angewöhnt, nur mit unsigned-Variablen zu arbeiten (also unsigned long, unsigned short und so). Beim Rechtsschieben von Signed-Werten werden nämlich von links nur dann Null-Bits nachgefüllt, wenn das höchste Bit 0 ist. Ist das höchste Bit 1, dann werden Eins-Bits nachgeschoben, und das kann in Hardware-Registern katastrophale Folgen haben. Unsigned-Variablen sind da ungefährlich, die werden immer mit Nullen aufgefüllt. Dieser Post wurde am 16.02.2011 um 09:04 Uhr von ao editiert. |