Bug beim Shiften im AVR-GCC?

Gast #438980
Lesenswert?
• ▲
▼
Hallo


Aus (x >> y) macht der AVR-GCC im wesentlich folgenden Assembler-Code:
1
+0000098C:   9535        ASR     R19              Arithmetic shift right
2
+0000098D:   9527        ROR     R18              Rotate right through carry

Nicht ganz vollständig, aber es geht ja auch nur um die erste Zeile:

ASR schiebt bitweise nach rechts, wobei das MSB konstant bleibt. Nun 
ergibt sich ein echtes Problem:
1
x = 0b10000000;
2
y = 3;
3

4
(x >> y) = 0b11110000;

anstatt, wie ich es gerne hätte und auch erwarten würde
1
(x >> y) = 0b00010000;


Ist das ein Fehler im GCC oder muss das so sein? Wie könnte ich das 
umgehen, so dass ich meine normale Shift-Funktion bekomme?

Gruss

Michael
Gast #438982
Lesenswert?
• ▲
▼
Manchmal staunt man, wenn einem um diese Zeit noch in rekordverdächtigen 
4 Minuten geantwortet wird, und zwar so gut, dass man das Problem lösen 
kann!

x war vorhin ein char, da es mir rein nur um das Bitfeld in x ging, 
nicht um den dahinterstehenden Zahlenwert. Jetzt ist es ein uint8_t und 
es funktioniert!

Danke, und gute Nacht ;-)

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.