PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : xlol


Gast
2006-07-09, 20:01:47
Ich hab mal ne Frage

wie kann man

ror (rechts rotieren) und brev (bitsumkehren)

in C++ schnell ohne ASM! implementieren? geht das ohne Forschleifen (auch ohne unrolled)?

Neomi
2006-07-09, 20:13:50
Für die Bitumkehr kenne ich jetzt keine performante Variante, da muß man schon alle Bits einzeln anpacken. Rotation geht aber mit zwei Shifts und einem OR. Hier ein Beispiel für einen "unsigned long" (32 Bit):

inline unsigned long ror (unsigned long Value, int Count)
{
return ((Value >> Count) | (Value << (32 - Count)));
}

Gast
2006-07-09, 21:09:19
was soll denn bitsumkehren sein?
sowas:
test = !test;
???

Gast
2006-07-09, 21:11:48
vorne <-> hinten

Trap
2006-07-09, 22:04:54
Mir fällt nix besseres als das ein:
short reversed[1<<16];
// reversed vorberechnen
reversed[num&0xffff]<<16|reversed[num0xffff0000]

HellHorse
2006-07-09, 22:38:41
Schau mal hier unter Reversing bit sequences
http://graphics.stanford.edu/~seander/bithacks.html

Gnafoo
2006-07-10, 12:22:40
Gast[/POST]']was soll denn bitsumkehren sein?
sowas:
test = !test;
???

Aus dem Gedächtnis und nicht ganz sicher (habs nie gebraucht), aber gabs dafür in C/C++ nicht den bitwise-complement operator ~? Also:


test = ~test;


Edit: *hust* jetzt verstehe ich auch, was mit "vorne <-> hinten" gemeint war :D.

AlSvartr
2006-07-10, 12:52:00
Der Tod[/POST]']Aus dem Gedächtnis und nicht ganz sicher (habs nie gebraucht), aber gabs dafür in C/C++ nicht den bitwise-complement operator ~? Also:


test = ~test;

Hier ist aber mit Umkehren wohl scheinbar spiegeln gemeint...ansonsten hätte ich daran nämlich auch zuerst gedacht ;)

HajottV
2006-07-10, 15:24:26
Gast[/POST]']brev (bitsumkehren)

Was soll denn das sein? :|

Jörg

Coda
2006-07-10, 16:01:10
Bits umtauschen 0<->31, 1<->30, 2<->29 usw.
Braucht man eher selten ;)

Gast
2006-07-10, 21:50:49
Der Tod[/POST]']Aus dem Gedächtnis und nicht ganz sicher (habs nie gebraucht), aber gabs dafür in C/C++ nicht den bitwise-complement operator ~?
Ähh ja, sry. Ich schmeiß die logischen mit den bitweisen Operatoren immer durcheinander :(