Archiv verlassen und diese Seite im Standarddesign anzeigen : xlol
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)));
}
was soll denn bitsumkehren sein?
sowas:
test = !test;
???
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
Bits umtauschen 0<->31, 1<->30, 2<->29 usw.
Braucht man eher selten ;)
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 :(
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.