Bitverschiebung
-
Hallo Leute
Ich muss nun mit ANSI C über Schalter LEDs zum Leuchten bringen. Jetzt habe ich da ein Problem. Wenn ich z.B:
LED = 0xDC habe...
und ich muss das gesetze Bit um eine Stelle nach rechts verschieben, gibt es ja diesen Operator >>....
Aber wie kann ich diese Verschiebung nur bei den letzten 5 Bits ausführen lassen?
Bitte um Hilfe.
Vielen Dank.
Lg Nicole
-
Du teilst das ganze in den zu verschiebenden und den zu belassenden Anteil auf, und verschiebst nur den ersten. Danach fügst du sie wieder zusammen.
LED & 0x1f sind die letzten 5 Bits (wenn du mit "letzte" die mit dem niedrigsten Wert meinst).
LED & 0xe0 sind die ersten 3 (wenn es insgesamt 8 sind).
Also:LED = ((LED & 0x1f) >> 1) | (LED & 0xe0);
-
[u]Untere 5 Bits schiften[/u] Quellbyte: 11011100 Maske (&): 00011111 ---------------------- Ergebnis: 00011100 Shiften (>>): 00001110 [u]5 Bits aus Quellebyte ausblenden[/u] Quellbyte: 11011100 Maske (&): 11100000 ---------------------- Ergebnis: 11000000 [u]Zusammenbauen[/u] geändertes Quellbyte: 11000000 geshiftetes Byte: 00001110 ----------------------------------------- Ergebnis (nach | Verknüpfung): 11001110
Kann sein, dass es auch einfacher geht, aber das fällt mir jetzt spontan nicht ein.
-
Hi danke Leute...
Nur mein Problem ist jetzt noch, dass ja bei der Bitverschiebung automatisch 0 en angehängt werden... Und bei mir sollte es sozusagen um eine sich drehende Verschiebung handeln...
also1100->0110->0011->1001
Wie kann ich das realisieren?
Danke vielmals.
Lg Nicole
-