Forum: Compiler & IDEs schiebeoperator langsamer als direkter wert?


von pumpkin (Gast)


Lesenswert?

moin forum,

nur mal aus interesse hab ich ne frage (die hoffentlich noch nicht zu 
oft durchgekaut wurde - sufu hat nix ergeben).

kurz und knapp: was ist schneller?

x &= ~(1 << 7);

oder

x &= 0x7F;



man stelle sich das mit mehreren schiebeoperationen vor ( (...) | (...) 
| ... ). brauch der µC tatsächlich für jeden schiebevorgang 1 cycle 
(also im beispiel oben 7)?


pumpkin

p.s. ich tippe auf den 'direkten' wert

von johnny.m (Gast)


Lesenswert?

Konstante Werte, die dem Compiler bekannt sind, werden auch direkt vom 
Compiler berechnet und nicht während der Programmlaufzeit! "1 << 7" ist 
ein konstanter Wert, und genauso ist ~(1 << 7) konstant und zur 
Compilezeit bekannt. Eine 1 um 7 Stellen nach links geschoben ist ein 
80h, das Bitkomplement davon ist 7fh. Der Compiler macht daraus sofort 
den entsprechenden Binärwert. Die beiden obigen Schreibweisen sind, was 
den erzeugten Code angeht, identisch und demzufolge sind beide exakt 
gleich schnell. Das Thema ist hier aber tatsächlich schon x-mal 
durchgekaut worden.

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
Noch kein Account? Hier anmelden.