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.