-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: rol und ror in C

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.05.2007
    Ort
    Haselhof
    Alter
    24
    Beiträge
    65

    rol und ror in C

    Anzeige

    Gibt es im C eigentlich so Funktionen wie im Assembler(rol und ror)?

    Immer schön cool bleiben und nie aufgeben.
    Irgendwann klappts mal


  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Wie wäre es mit etwas inline Assembler ?

    Beispiel:
    Code:
    asm volatile (
    	    
    	    "ldi %2,8"          "\n\t"
    	    "0:"                "\n\t"
    	    "lsr %0"            "\n\t"
                "rol __tmp_reg__"   "\n\t"
                "dec %2"            "\n\t"
                "brne  0b" "\n\t"
                "mov %0,__tmp_reg__" "\n\t"
    	    : "=a" (tmp)
    	    : "0" (tmp), "a" (count) 
    );
    Dreht mit hilfe von rol alle Bits in tmp um, also Bit 0 wird zu 7 1 zu 6 usw.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.05.2007
    Ort
    Haselhof
    Alter
    24
    Beiträge
    65
    Blick ich nicht

    Immer schön cool bleiben und nie aufgeben.
    Irgendwann klappts mal


  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    33
    Beiträge
    165
    wie waers mit
    Code:
    unsigned char ror(unsigned char val, unsigned char places)
    {
        return (val>>places)|(val<<8-places);
    }
    
    unsigned char rol(unsigned char val, unsigned char places)
    {
        return (val<<places)|(val>>8-places);
    }
    Je nachdem ob man nun ein char, int oder long rotieren will muss natuerlich die Funktion entsprechend abgeaendert werden.

    HTH

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    @fluchtpunkt,
    Bist Du sicher, daß Deine Funktionen wirklich rol ror nachbilden ?

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    33
    Beiträge
    165
    naja nicht ganz, eigentlich ueberhaupt nicht. Naechstes mal les ich vorher was ror und rol eigentlich tut, hatte das anders in Erinnerung :/


    EDIT2: Aber eigentlich ist sowas wie rol und ror, exakt so nachgebildet wie in assembler ziemlich sinnlos.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Aber eigentlich ist sowas wie rol und ror, exakt so nachgebildet wie in assembler ziemlich sinnlos.
    Ja eben

    und wenn überhaupt, dann irgendwie ein Stück von Inlineassembler...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    28.05.2007
    Ort
    Haselhof
    Alter
    24
    Beiträge
    65
    Ah, weil ich möcht n LED Lauflicht mache und ich bekomm des irgendwie net hin.

    Immer schön cool bleiben und nie aufgeben.
    Irgendwann klappts mal


  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Ja dann beschreib mal etwas Dein Lauflicht und warum unbedingt rol oder ror helfen soll

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    33
    Beiträge
    165
    na wenn du ein lauflicht machen willst bei dem das was links rausfaellt rechts wieder reinkommt dann ist mein Code doch sehr gut geeignet.

    man kann sowas natuerlich auch ohne Bitshiftmagie machen.

    Code:
    unsigned char rotate_right(unsigned char pattern)
    {
        unsigned char add;
        if (pattern & 0x01)
          add = 0x80;
        else
          add = 0;
        pattern = pattern >> 1;
        pattern = pattern | add;
        return pattern;
    }

    Je nachdem wie dein Lauflicht aussieht muss das aber nicht der optimale Weg sein, deswegen ist es immer sehr hilfreich wenn man genau dazu schreibt was man eigentlich machen moechte. Gerade Anfaenger verrennen sich oft in irgendwelche "abstrusen Vorstellungen"

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •