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

    1100->0110->0011->1001

    Wie kann ich das realisieren?

    Danke vielmals.

    Lg Nicole




Anmelden zum Antworten