Hallo, wie kann ich in einer 16Bit-Variable alle 8 2Bit-Pärchen (Bit 0&1, 2&3, ...) jeweils miteinander vertauschen? Mir fällt weder eine Lösung mit Bitshifting, noch mit einer einfachen Subtraktion oder Addition ein. Habt ihr eine Idee?
temp1 = wert & 0xAAAA temp2 = wert & 0x5555 temp3 = temp1<<1 + temp2>>1
Kann ich gerade nicht nachvollziehen, erst heute Abend. Aber: Wie kommt man auf sowas? :)
ist Easy, 2x SHIFT, 2x AND und 1x OR -> fertig die Anzahl der benötigten Hilfsvariablen kannst Du Dir sicher selbst dazudenken :-) Grüße, sao
holger schrieb:
1 | // mal angenommen: wert = 1000000000000001
|
2 | |
3 | temp1 = wert & 0xAAAA; // 1010101010101010 |
4 | // temp1 = 1000000000000000
|
5 | |
6 | temp2 = wert & 0x5555; // 0101010101010101 |
7 | // temp2 = 0000000000000001
|
8 | |
9 | // hoppla:
|
10 | temp3 = temp1<<1 + temp2>>1; |
11 | // 0000000000000000 + 0000000000000000 = 0000000000000000
|
12 | |
13 | // korrekt wäre
|
14 | temp3 = temp2<<1 + temp1>>1; |
15 | // 010000000000000 + 0000000000000010 = 0100000000000010
|
> die Anzahl der benötigten Hilfsvariablen kannst Du Dir sicher selbst > dazudenken :-) Hilfsvariable?
1 | wert = ((wert&0xaaaa)>>1) | ((wert&0x5555)<<1); |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.