Forum: Mikrocontroller und Digitale Elektronik 16 Bit Integer: Alle geraden mit den ungeraden vertauschen?


von Ichnur (Gast)


Lesenswert?

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?

von holger (Gast)


Lesenswert?

temp1 = wert & 0xAAAA
temp2 = wert & 0x5555

temp3 = temp1<<1 + temp2>>1

von Ichnur (Gast)


Lesenswert?

Kann ich gerade nicht nachvollziehen, erst heute Abend. Aber: Wie kommt 
man auf sowas? :)

von sao (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.