ror



  • Kurze Frage, wie mache ich in c++ ROR also z.b.: (a ROR b)?
    Danke!



  • Geht afaik nicht plattformunabhängig. Du könntest es (VC++) so machen:

    __asm ror a, b
    


  • Oder mit viel Aufwand.

    Hier ein Beispiel für das rotieren von 8 Bit:

    char rorb(int n,unsigned char zeich)
    {
       unsigned char zeich1 = 0;
       unsigned char zeich2 = 0;
    
       zeich1 = zeich;
       zeich2 = zeich;
    
       zeich1 = zeich1>>n;
       zeich2 = zeich2<<(unsigned char) ((sizeof(zeich2) << 3) -n);
       return(zeich1|zeich2)
    }
    

    Mit etwas umbau kann man sich so ne Klasse bauen die es auf jedenfall kann, und diese dann für jedes OS spezialisieren.

    [edit]

    template <class T>
    T ror(int c,T a)
    {
    	T t(a<<c);
    	a>>=(sizeof(T)*8) -c; 
    	return t|a;
    }
    


  • hab mal irgendwo gelesen, dass das Nachbauen der Rotationsbefehle mit Shift und Or inzwischen schneller ist als das Original, weil R[CO][RL] von Compilern normalerweise überhaupt nicht ausgegeben werden und daher nur noch kompatibilitätshalber im Prozessor enthalten sind.


Anmelden zum Antworten