schiebeoperator langsamer als direkter wert?

Gast #473700
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
Gast #473706
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.