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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren