Byte ROR / ROL

  • C#
  • .NET (FX) 1.0–2.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von nafets.

    Byte ROR / ROL

    Hey,
    Da es ja keinen ROR/ROL operator gint wollte ich fragen wie ich ein byte (8 bits) um x stellen ROR'n bzw ROL'n kann?
    Wichtig ist dabei logischerweise das bei dem Vorgang keine Bits verloren gehen, wie es beim Shr/Shl gerne mal der Fall ist.
    Ist das ganze iwie sehr effizient möglich?

    Bspw :

    10011010 -> ROR4 -> ​10101001
    Die Idee ist dabei eine Funktion zu schreiben die Zwei bytes als input akzeptiert (das eigentliche Byte und die anzahl an Verschiebungen)
    und returned werden sollte das fertig geROR'te bzw geROL'te byte.
    Gibts da iwelche eleganten tricks mit binary operatoren?

    Lg
    Rikduo
    C# Developer
    Learning C++
    Naja, ganz so trivial ist das nicht, zumal ich glaube, das dein Code einen Fehler hat.
    Ich hab dein ROL gerade mal auf Papier ausprobiert:




    Ds letzte Bit scheint nicht zu stimmen.
    Bei Leftshift wird doch rechts mit 1en aufgefüllt und beim Rechtshift links mit 0en, oder?


    EDIT : Hab mich wohl verrechnet dein Algo scheint doch zu funktionieren, demnach musste das komplement (ROR) also so aussehen :

    C#-Quellcode

    1. ​public static byte RotateRight(this byte v, byte c)
    2. {
    3. if (c > 0x08)
    4. throw new Exception("Shift cant be higher then 8.");
    5. return (byte)((v >> c) | (v << (8 - c)));
    6. }
    C# Developer
    Learning C++

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rikudo“ ()