009
14.04.2007, 18:59 Uhr
Matthias Fischer
|
DANKE für deinen Beistand!!
Das mit den cpp-tags werd ich selbstverständlich in zukunft berücksichtigen!
C++: |
#define BUFFER (sizeof(long long) * 8)
|
die zeile ist mir nicht ganz klar...was ist, wenn long long 4 byte groß ist, dann wär der Buffer grade mal 32 groß -> 32 elemente im array statt 64!
anscheinend ist mir das mit dem bit-shiften doch noch nicht ganz klar...hab wiest schon gesehen hast deinen einzeiler auf 3 zeilen aufgeteilt und mir überlegt was jede zeile macht, aber ich hab da irgendwie noch probleme das zu verstehen... btw: funktioniert dein einzeiler auch mit zufälligen werten im array?
C++: |
src = (orig_num >> n) & 1;
|
hier schiebst du die bits um die position n nach rechts und machst ne &-verknüpfung mit 1...hm, wieso eigentlich von links anfangen, das LSB-Bit steht doch rechts? und für was brauch ich die &-verknüpfung da genau? nehemn wir an wir haben die zahl 128 = 1000 0000 und n ist 2, dann würde das heißen der 1er würde um 2 stellen nach rechts geschoben werden, also befindet sich der 1er auf
0010 0000 0000 0001 mit 1 UND-verknüpft würder das ergeben ----------- 0000 0000 -> wieso dieser schritt und steht dann in src 0 drinnen?
C++: |
dest = src << perm_[n];
|
und hier schiebst du das bit von src um den inhalt von perm_[n] nach links (wieso auf einmal nach links?)...in dest müsste sich dann das src-bit befinden oder?
C++: |
result = result | dest;
|
diese OR-verknüpfung ist mir auch net ganz klar...
ach ja, wenn ich BUFFER auf 64 setz und ich die zahl 255 hab, dann kommt irgendwie ein blödsinn raus beim shiften...irgendwas mit -934783274342384...
ich weiß ich nerv, aber es wär wirkli super wennst ma des BITTE nochmal in ruhe erklären könntest |