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
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