Bitmaskierung funktioniert nicht

OP #2763958
Hallo,

ich bin gerade echt am Verzweifeln und hoffe, man kann mir hier helfen.

Ich programmieren gerade ein Programm für einen ATTiny2313.

In dem Programm habe ich ein Array und eine Variable, in der ein zuvor 
berechneter Wert gespeichert ist:
1
char data[24];
2
uint16_t Teiler;
3

4
...
5

6
Teiler = 0b101111111110111;      //Ein möglicher Wert zur Verdeutlichung

Der Wert von 'Teiler' soll nun in das Array, aber die Bits müssen 
"gespiegelt" werden, also so:
1
data[0] = (Teiler & 1);
2
data[1] = (Teiler & 2);
3
data[2] = (Teiler & 4);
4
data[3] = (Teiler & 8);
5
data[4] = (Teiler & 16);
6
data[5] = (Teiler & 32);
7
data[6] = (Teiler & 64);
8
data[7] = (Teiler & 128);
9
data[8] = (Teiler & 256);
10
data[9] = (Teiler & 512);
11
data[10] = (Teiler & 1024);
12
data[11] = (Teiler & 2048);
13
data[12] = (Teiler & 4096);
14
data[13] = (Teiler & 8192);

Die restlichen Elemente des Array werden später befüllt.

Das Problem:
Bis data[7] klappt alles, danach werden alle Elemente des Arrays 0
Woran liegt das, was mache ich falsch?

Gruß
und Danke im Voraus
Doran
Hallo Doran,

ein kleiner Tipp, vielleicht ist es Dir nicht bewusst, deine Schleife 
läuft nur bis 14.

Also Besser so etwas verwenden.
1
for(uint8_t i = 0; i < 16; i++)
2
   data[i] = ((Teiler>>i) & 1);


Doran S. schrieb:
> Hallo,
>
> danke für die Antworten.
> Ich wollte eig. was ganz anderes haben, nämlich so:
>
>
1
for(uint8_t i = 0; i != 15; i++)
2
>         data[i] = ((Teiler>>i) & 1);
>
> Gruß
> Doran
OP
Hallo,

es werden ja die Elemente des Arrays gefüllt, also:

data[0] = ...
data[1] = ...
...
data[12] = ...
data[13] = ...

und data[13] soll das letzte Element sein, das zugewiesen wird, also 
muss die Schleife genau 14 mal (0...13) durchlaufen.

Wäre das dann so erfüllt:
1
for(uint8_t i = 0; i < 14; i++)
2
      data[i] = ((Teiler>>i) & 1);
?

Gruß und Danke für die Tipps,
Doran

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.