Bit weise schieben im Array shift

OP #617301
Lesenswert?
• ▲
▼
Hallo an alle die das hier lesen!
Ich habe folgendes Problem
Ich möchte in ein uint8_t array[12]
bitweise schieben geht aber nur für das erste Byte alle anderen sind 0.

array[0] |= (1<<0...7) geht
array[0] |= (1<<8....) geht nicht mehr

AVR GCC
attiny2313

Gruß Torben
#617368
Lesenswert?
• ▲
▼
Wo ist das niederwertigste Bit?

Annahme: Bit 0 in array[0] ist das niederwertigste Bit
         Bit 7 in array[11] ist das höchstwertigste Bit


Um 1 Bit über 12 Bytes hinweg um jeweils 1 Stelle zu schieben
1
  for( i = 11; i > 0; --i ) {
2
    tmp = array[i-1] & 0x80;
3
    array[i] = array[i] << 1;
4
    if( tmp )
5
      array[i] |= 0x01;
6
  }
7
  array[0] = array[0] << 1;

Einer der wenigen Dinge, die ein heisser Kandidat für
Inline Assembler sind, da man dort durch Einbeziehung
des Prozessor Carry Flags, die ganze 'Übertragsberücksichtigung'
ins nächste Byte einfacher hinkriegt.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.