mikrocontroller.net

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


Autor: Ichnur (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
temp1 = wert & 0xAAAA
temp2 = wert & 0x5555

temp3 = temp1<<1 + temp2>>1

Autor: Ichnur (Gast)
Datum:

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

Autor: sao (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
// mal angenommen: wert = 1000000000000001

 temp1 = wert & 0xAAAA;   // 1010101010101010
// temp1 = 1000000000000000

 temp2 = wert & 0x5555;   // 0101010101010101
// temp2 = 0000000000000001

// hoppla:
 temp3 = temp1<<1 + temp2>>1;
//      0000000000000000 + 0000000000000000 = 0000000000000000

// korrekt wäre
 temp3 = temp2<<1 + temp1>>1;
//       010000000000000 + 0000000000000010 = 0100000000000010

> die Anzahl der benötigten Hilfsvariablen kannst Du Dir sicher selbst
> dazudenken :-)
Hilfsvariable?
   wert = ((wert&0xaaaa)>>1) | ((wert&0x5555)<<1);

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.